Java中是否有等效的epoll?

2022-09-01 20:49:08

Java中是否有与Linux epoll等效的等效物?

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

Java中是否有类似的工具?我查看了nio包,它允许我使用选择器注册一些套接字。但是似乎没有使用选择器注册控制台/标准io。我没有看到什么吗?有没有另一种方法可以做到这一点?

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

谢谢。df


答案 1

Java SE 6 中的增强功能

java.nio

包括一个基于 Linux epoll 事件通知工具的新实现。epoll 工具在 Linux 2.6 和更新的内核中可用。当有数千个可选择通道注册时,新的基于 epoll 的选择器提供程序实现比传统的基于轮询的选择器提供程序实现更具可扩展性。当检测到 2.6 内核时,将默认使用新的 SelectorProvider 实现。当检测到 2.6 之前的内核时,将使用基于轮询的选择器提供程序。java.nio.channels.SelectorProvider

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


答案 2

是的,该软件包允许使用 s,其提供的功能等同于 / 并且实际上其中一个实现用作后端(这是通过 Java 属性选择的)。选择器通常与网络套接字一起使用,但是如果您查看文档中的不同实现,我认为您很可能也可以将此机制与标准输入一起使用(有些帮助器类允许在某种程度上在基于旧的API和API之间移动)。nioSelectorpoll()select()epolljava.nio.channels.spi.SelectorProviderChannelStreamnio