Java中有epoll等价吗?

Java中有相同的Linux epoll吗?

epoll允许线程对许多异类事件做出反应。 例如,我可以有一个线程响应套接字事件或来自控制台的输入。 在C ++中,我可以通过使用epoll注册stdio和套接字来实现这一点。 我的线程将由来自其中任何一个的事件触发。

Java中有类似的设施吗? 我看了一下nio包,它允许我用一个选择器注册一些套接字。 但似乎没有用选择器注册控制台/标准io。 我没有看到什么? 还有另一种方法吗?

关于“为什么”:我想编写一个通过套接字进行通信的程序,我想通过从控制台输入命令来驱动该程序。 我知道如何通过将控制台输入和通信分离到不同的线程来实现这一点,但我很好奇是否有办法在单个线程中执行此操作。

谢谢。 DF

Java SE 6中的增强function

java.nio中

包含基于Linux epoll事件通知工具的新java.nio.channels.SelectorProvider实现。 epoll工具可以在Linux 2.6和更新的内核中使用。 当使用Selector注册了数千个SelectableChannel时,新的基于epoll的SelectorProvider实现比传统的基于poll的SelectorProvider实现更具可伸缩性。 检测到2.6内核时,默认情况下将使用新的SelectorProvider实现。 检测到2.6之前的内核时,将使用基于轮询的SelectorProvider。

https://docs.oracle.com/javase/8/docs/technotes/guides/io/enhancements.html

是的, nio包允许使用Selector ,它提供与poll() / select()等效的function,实际上其中一个实现使用epoll作为后端(这是通过java.nio.channels.spi.SelectorProvider Java选择的)属性)。 选择器通常与网络套接字一起使用,但是如果你查看文档中的不同Channel实现,我认为你可能也可以使用这种机制和标准输入(有一些帮助类允许在旧的Stream之间移动 -在某种程度上基于API和nio API)。

Interesting Posts