dfr*_*eit 20 java multithreading epoll
Java中有相同的Linux epoll吗?
epoll允许线程对许多异类事件做出反应.例如,我可以有一个线程响应套接字事件或来自控制台的输入.在C++中,我可以通过使用epoll注册stdio和套接字来实现这一点.我的线程将由来自其中任何一个的事件触发.
Java中有类似的设施吗?我看了一下nio包,它允许我用一个选择器注册一些套接字.但似乎没有用选择器注册控制台/标准io.我没有看到什么?还有另一种方法吗?
关于"为什么":我想写一个通过套接字进行通信的程序,我想通过从控制台输入命令来驱动这个程序.我知道如何通过将控制台输入和通信分离到不同的线程来实现这一点,但我很好奇是否有办法在单个线程中执行此操作.
谢谢.DF
小智 22
Java SE 6中的增强功能
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软件包允许使用Selectors,该s提供与poll()/ 等效的功能,select()并且实际上是其中一种实现方式epoll用作后端(通过java.nio.channels.spi.SelectorProviderJava属性选择)。选择器通常与网络套接字一起使用,但是如果您仔细阅读Channel文档中的不同实现,我认为您也可以将这种机制与标准输入配合使用(有些帮助程序类允许在旧Stream的API 之间进行切换和nioAPI)。