java - Java中的Selector有什么好处

标签 java asynchronous io nio

据我所知,我们可以将所有 SocketChannel 注册到服务器端的一个 Selector 中,但为什么呢?将这些 SocketChannel 添加到 ArrayList,然后手动迭代这个 List 有什么区别吗?

最佳答案

选择器允许 JVM 实现通过将工作下推到适当的内核/驱动程序来有效地与操作系统 select/epoll/kqueue(或等效)机制一起工作。现代操作系统实现此类函数的时间复杂度通常被认为是 O(1)。

也就是说,Java 本身可以“hibernate ”,直到底层操作系统向一个或多个 channel 发出信号 - 这是通过选择器在 Java NIO 中配置和报告的。

当与选择器循环时,选择将“阻塞”直到 channel 发生变化 - 因此与选择器保持一致可以让人们有效地找到相关 channel 并处理它们。上述目标的一部分是保持“每个事件”处理 O(c),其中在处理 n 个 channel 时 c << n。

关于java - Java中的Selector有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23082189/

相关文章:

java - 通过套接字将声音从android发送到PC时出现噪音

java - 如何在java中实现超时来查看是否有响应

javascript - 语法错误: Unexpected Token async()

If..And If...And If 的 C# 结构

perl - <*> 符号的含义

Java 贪吃蛇游戏每次 Eclipse 重新启动后即可正常运行一次

java - 断电期间文件操作如何执行

javascript - 在循环中调用多个异步调用未按预期工作

php - 在 php/ajax 聊天系统上工作

Java:为什么我的文件写入不起作用?