Sendfile是Linux實(shí)現(xiàn)的系統(tǒng)調(diào)用,可以通過避免文件在內(nèi)核態(tài)和用戶態(tài)的拷貝來優(yōu)化文件傳輸?shù)男省?/p>
其中大名鼎鼎的分布式消息隊(duì)列服務(wù)Kafka就使用sendfile來優(yōu)化效率,具體用法可參見其官方文檔。
在普通進(jìn)程中,要從磁盤拷貝數(shù)據(jù)到網(wǎng)絡(luò),其實(shí)是需要通過系統(tǒng)調(diào)用,進(jìn)程也會(huì)反復(fù)在用戶態(tài)和內(nèi)核態(tài)切換,頻繁的數(shù)據(jù)傳輸在此有效率問題。因此我們必須意識(shí)到Linux給我們提供了sendfile這樣的系統(tǒng)調(diào)用,可以提高進(jìn)程的數(shù)據(jù)傳輸效率。