背景:我需要以异步方式向WebSocket客户端发送许多小尺寸消息。消息通常以峰值发送,因此在暂停后我需要快速发送~5000条消息。所以问题是:
最好的方法是每个线程分组~20个asyncs,所以我需要非常具体的队列:
take()
(所以我可以开始1 ... 20个异步I / O并等待单线程中的完整性)所以基本上:我需要像队列这样的结构,在单个阻塞调用中有阻塞(1到X)等待元素。伪代码:
[each of ~50 processing threads]:
messages = queue.blockingTake( max 10 or at least 1 if less than 10 available );
for each message: message.startAsync()
for each message: message.waitToComplete()
repeat
答案 0 :(得分:0)
如果没有必要,我不会从头开始实施队列。如果您有兴趣,请提供一些想法:
队列>如果您只有1个主题提供优惠。如果你有更多,那么这个系列必须是同步的。比如,一个提交者peek() - s进入队列,看到最后一个集合有太多元素,所以它创建一个新元素并提供它。
或
许多正在运行的线程,其中runnables从队列中逐个获取元素。
或
每个发送线程1个队列,如果保留队列引用,则可以循环方式为每个队列添加元素。
或
将您选择的BlockingQueue子类化并创建一个" Collection take(int i)"使用正常take()的重写版本的方法。