1
背景:我需要以異步的方式將許多小尺寸的消息發送給WebSocket客戶端。消息通常是在高峯期發送的,因此在暫停後我需要快速發送〜5000條消息。所以,問題是:如何創建我們可以阻塞的Java併發隊列 - 在單個調用中使用多個元素?
- 我不想在單個線程啓動5000米異步的
- 我不想循環「開始異步」 - 「等待完成」 5000串行
- 倍我不希望使用5000周的主題,使用單一的「開始異步」 - 「等待完整的」每線程
最好的辦法是組〜每個線程20個異步操作,所以我需要非常具體的隊列:
- 很多意味着隊列併發推/輪詢
- 小型異步意味着我想在束輪詢,如每個隊列
take()
1〜20的消息(所以我可以開始1 .. .20異步I/O並等待單線程完成) - 立即意味着我不想等待20個消息輪詢,只有在隊列中有很多消息時才使用輪詢輪詢。單個消息應該被輪詢並立即發送。
所以基本上:我需要結構像隊列已經阻斷取(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