选择器如何在内部实施?

Gop*_*pal 12 java nio

我刚刚开始探索java NIO,非阻塞IO.我很想知道实施背后的基本原理.如何建立Java选择器和物理套接字之间的通信?是否有持续轮询底层资源的操作系统级线程?并且每个选择器是否有连续轮询接收这些事件的java线程?有人可以指点我这个.

Kil*_*oth 6

不,重点select是当没有任何事情发生时你不必浪费周期轮询.每个操作系统都以某种方式(通常通过硬件中断)实现此功能,并通过select()系统调用使其可供用户空间程序使用.与Java语言的连接是,select如果您使用正确的NIO类和方法,JVM现在包含将为您调用操作系统的代码.但这需要对JVM代码本身进行更改,这不是你在NIO之前纯粹在Java中完成的事情.


Iva*_*van 0

我认为最好先给你一张照片(取自其他人的博客)
\n旧IO和NIO
\n (来源:csdn.net

\n\n


还有一些信息来自该博客,

\n\n
    \n
  1. 对于选择的实现,这取决于操作系统。对于*nix ENV中的epoll/select,可以从\xe3\x80\x8aUnix网络编程\xe3\x80\x8b获取更多信息
  2. \n
  3. 对于通知/唤醒选择,JVM 也使用不同的实现,例如 Windows 上的 TCP/IP,*nix 上的管道。
  4. \n
\n