到目前为止,几乎每个人都听说过Linux下的零拷贝功能,但是,对零拷贝深入理解的人并不多;因此,我决定写一些文章略微深入的讲述这个问题,希望能将这个有用的特性解释清楚。在这篇文章中,我打算从用户视角对零拷贝进行阐述,对于内核级别的细节将会被有意地省略。
什么是零拷贝?
为了更好地理解问题的答案,我们需要理解清楚问题;我们思考一下,一个网络服务器通过网络将存储在文件中的数据传输到客户端,这么一个简单的过程对应的样例代码:
read(file, tmp_buf, len);
write(socket, tmp_buf, len);
看起来十分简单,感觉这两句调用不会带来很多的开销;实际上,想象和事实差距蛮大;在这两句简单的调用背后,数据至少被拷贝不下于四次,并且进行了多次用户/内核上下文切换。实际上,这个过程远不仅仅如此,涉及的内容更加复杂,但是,为了文章的简单易懂,对这一部分进行简化;




网友评论