有童鞋分享了unix的五种io模型,留意到里面有一句话“将数据从内核拷贝到用户空间”,怀疑这句话有问题。

unix的五种io模型中,把io读操作分为两个部分:
1、等待数据。
2、将数据从内核拷贝到用户空间。

我以java语言中的实现为例子:

在第三种模型“多路复用”中,第二步的数据读取工作可以是这样的
[code]
SocketChannel socketChannel = (SocketChannel) key.channel();
ByteBuffer dst = ByteBuffer.allocateDirect(1024);//分配的是直接内存
socketChannel.read(dst);
[/code]
数据直接从channel中读取到直接内存,没有从内核空间向用户空间拷贝的过程。

在第五种模型“aio”中,向aio_read函数中传递的缓冲区指针可以是mmap映射出的内存地址,也是内核到内核,没有内核空间向用户空间拷贝的问题。

当然,也可能是我理解有误,欢迎指正~

标签: unix五种io模型, 从内核拷贝到用户空间

添加新评论