kafka零拷贝的原理

在实际应用中,如果需要把磁盘中的某个文件内容发送到远程服务器上,那么他必须经过几个拷贝过程(1)从磁盘中去读取目标文件的内容拷贝到内核缓冲区中(2)把内核缓冲区的数据拷贝到用户空间的缓冲区中(3)在应用程序中调用write()方法把用户空间缓冲区的数据拷贝到内核空间的socket Buffer中(4)把在内核模式下的socket  Buffer中的数据赋值到网卡缓冲区,最后网卡缓冲区再把数据传输到目标服务器上。在这个过程中我们发现数据从磁盘到最终发送出去要经历4次拷贝,而在这4次拷贝过程中,有两次拷贝是浪费的,(1)从内核空间拷贝到用户空间(2)从用户空间再次拷贝到内核空间。所谓的零拷贝就是把这两次多余的拷贝忽略掉。应用程序可以直接把磁盘中的数据从内核中直接传输到socket.
posted @ 2022-06-16 17:18  hulifang  阅读(638)  评论(0编辑  收藏  举报