我正在研究不同语言中的网络IO API结构,并对Java中的异步IO API如何实现有疑问。旧版(1.4之前)的流式IO API提供同步阻塞读/写功能。JDK 1.4 NIO API使用 epoll/select 来测试IO的准备就绪状态(通过SelectableChannel和Selector等暴露给用户)。这在Windows和*nix上都是可能的。这是反应器模式。现在,JDK7引入了NIO.2 API,其中包括异步API(proactor模式),并使用内部(可配置的)线程池在后台进行IO操作,并在完成后回调到用户代码。它可能在Windows上使用IOCP,但我想知道:
1. 在我的主要平台Linux上,它使用什么?它使用epoll和friends,还是使用线程池来执行阻塞IO?
2. NIO.2中实际的IO操作(与平台无关)是由Java线程池中的用户线程执行,还是由内核线程执行,而Java线程池线程只负责复制字节缓冲区并回调给用户代码?