Linux - 怎么实现大文件传输
生活随笔
收集整理的這篇文章主要介紹了
Linux - 怎么实现大文件传输
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 前言
博文《PageCache》中介紹了 PageCache 的優缺點,其實在處理大文件中 PageCache 作用反而沒有那么好。所以本文介紹 Linux 是怎么處理大文件的。
二 起因
首先看一下一個 read() 系統調用流程發生了什么,如下圖:
從上圖不難發現兩個問題:1,這是一個同步 I/O;2,數據多次拷貝。通常分別采用 異步 I/O 和 直接 I/O 來優化上面的問題。
三 異步 I/O、 直接 I/O
異步 I/O 是指發起 I/O 請求后,不再阻塞等待。而是先去處理其他任務,當拷貝完成后再進行處理。
異步 I/O 并沒有涉及到 PageCache,所以使用異步 I/O 就意味著要繞開 PageCache。
繞開 PageCache 的 I/O 叫直接 I/O,使用 PageCache 的 I/O 則叫緩存 I/O。通常,對于磁盤,異步 I/O 只支持直接 I/O。
如下圖:
四 總結
針對大文件的傳輸的方式,應該使用「異步 I/O + 直接 I/O」來替代零拷貝技術。常見的兩種 直接 I/O 應用場景:
總結
以上是生活随笔為你收集整理的Linux - 怎么实现大文件传输的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Azure blob 文件下载
- 下一篇: vue 企业发展历程动画_三维动画的发展