44 lines
987 B
C#
44 lines
987 B
C#
|
|
using System.Threading.Tasks;
|
||
|
|
|
||
|
|
namespace dotNetty_kcp.thread
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
*
|
||
|
|
* 单生产者单消费者 500W tps
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
public class DistuptorMessageExecutor:AbstratcMessageExecutor
|
||
|
|
{
|
||
|
|
private RingBuffer<ITask> _ringBuffer;
|
||
|
|
|
||
|
|
private const int MAX_QUEUE_SIZE = 2 << 10;
|
||
|
|
|
||
|
|
|
||
|
|
public override void start()
|
||
|
|
{
|
||
|
|
_ringBuffer = new RingBuffer<ITask>(MAX_QUEUE_SIZE);
|
||
|
|
base.start();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public override bool isFull()
|
||
|
|
{
|
||
|
|
return _ringBuffer.Count == MAX_QUEUE_SIZE;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected override bool isEmpty()
|
||
|
|
{
|
||
|
|
return _ringBuffer.Count == 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected override bool TryDequeue(out ITask task)
|
||
|
|
{
|
||
|
|
return _ringBuffer.TryDequeue(out task);
|
||
|
|
}
|
||
|
|
|
||
|
|
protected override bool TryEnqueue(ITask task)
|
||
|
|
{
|
||
|
|
return _ringBuffer.tryEnqueue(task);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|