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