簡體   English   中英

Java中Selector的優勢是什么

[英]What's the advantage of Selector in Java

據我所知,我們可以將所有SocketChannel注冊到服務器端的一個選擇器中,但是為什么呢? 將這些SocketChannel添加到ArrayList中有什么區別,然后我手動迭代此List?

選擇器提供了低延遲的控制傳遞。 如果您定期喚醒並瀏覽頻道列表,則平均等待時間為T / 2,減少此延遲的唯一方法是花更多時間瀏覽列表;對於很小的T,您實際上忙於循環。 使用選擇器,平均延遲更短,並且不會浪費任何時間維護或遍歷列表。

通過將工作下推到適當的內核/驅動程序中,選擇器允許JVM實現與操作系統的select / epoll / kqueue(或等效方法)機制一起有效地工作。 這種功能的現代OS實現通常被認為是O(1)。

也就是說,Java本身可以“休眠”,直到底層OS發出一個或多個通道的信號為止-這是通過選擇器在Java NIO中配置和報告的。

與選擇器循環時,選擇將“阻止”直到發生頻道更改-因此與選擇器保持一致可以使人們有效地找到相關的頻道並進行處理。 上述目標的全部都是在處理n個通道時保持“按事件”處理O(c),其中c << n。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM