**异步IO(AIO):**当用户进程向内核发起某个操作后,会立刻得到返回,并把所有的任务都交给内核去完成(包括将数据从内核拷贝到用户自己的缓冲区),内核完成之后,只需返回一个信号告诉用户进程已经完成就可以了。
异步 IO 模型是真正意义上的无阻塞的IO操作,但是目前只有windows支持AIO,linux内核暂时不支持。
所以,理论上liinux的epoll尽管很猛,但是read的第二阶段:内核空间到用户空间还是阻塞的。
尽管,使用了mmap加速了内存拷贝,但是不是完全意义的零拷贝。(具体见下文解释)
PS:JDK1.5_update10版本使用epoll替代了传统的select/poll,极大的提升了NIO通信的性能。
零拷贝补充:
零拷贝技术的发展很多样化,现有的零拷贝技术种类也非常多,而当前并没有一个适合于所有场景的零拷贝技术的出现。对于 Linux 来说,现存的零拷贝技术也比较多,这些零拷贝技术大部分存在于不同的 Linux 内核版本,这里我们针对这些零拷贝技术所适用的不同场景对它们进行了划分。概括起来,Linux 中的零拷贝技术主要有下面这几种:
- 直接 I/O:对于这种数据传输方式来说,应用程序可以直接访问硬件存储,操作系统内核只是辅助数据传输:这类零拷贝技术针对的是操作系统内核并不需要对数据进行直接处理的情况,数据可以在应用程序地址空间的缓冲区和磁盘之间直接进行传输,完全不需要 Linux 操作系统内核提供的页缓存的支持。
- 在数据传输的过程中&#x