1. 程式人生 > >linux的零拷貝技術

linux的零拷貝技術

情景:將服務端主機磁碟中的檔案不做修改地從已連線的socket發出去,我們通常用下面的程式碼完成:

while((n = read(diskfd, buf, BUF_SIZE)) > 0)
    write(sockfd, buf , n);

這裡寫圖片描述
使用零拷貝技術
零拷貝主要的任務就是避免CPU將資料從一塊儲存拷貝到另外一塊儲存,主要就是利用各種零拷貝技術,避免讓CPU做大量的資料拷貝任務,減少不必要的拷貝,或者讓別的元件來做這一類簡單的資料傳輸任務,讓CPU解脫出來專注於別的任務。這樣就可以讓系統資源的利用更加有效。

使用sendfile

從2.1版核心開始,Linux引入了sendfile來簡化操作:

#include<sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

這裡寫圖片描述