<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ![](http://tinywan-develop.oss-cn-hangzhou.aliyuncs.com/18-9-3/68162193.jpg) ## sendfile()對nginx性能的提升 Linux kernel 2.2之前,(如圖)讀寫數據基本都是使用read系統調用和write系調用. 以nginx來說如果一個請求建立,從磁盤的文件到網絡連接之間會通過硬件(DMA)---內核層---用戶層多次讀寫系統來完成文件數據的復制傳輸:從內核層用read系統調用讀到用戶層,再從用戶層用write系統調用寫到內核層,每一次用戶層到內核層的進行一次上下文轉換,這種代價是非常昂貴的,甚至在沒有數據變化時這種復制尤其顯得多余。 如果nginx接受大量并發請求,這種系統調用就會非常頻繁,服務器的性能就會下降。 ![](http://tinywan-develop.oss-cn-hangzhou.aliyuncs.com/18-9-3/79634632.jpg) 在Linux kernel2.2版本之后出現了一種叫做“零拷貝(zero-copy)”系統調用機制,目前很多應用服務器如apache、samba、nginx都支持sendfile。注意:sendfile系統調用是一種文件傳輸的系統調用和kernel系統調用關系不大。 ![](http://tinywan-develop.oss-cn-hangzhou.aliyuncs.com/18-9-3/45931953.jpg) > 如圖所示,nginx在支持了sendfile系統調用后,避免了內核層與用戶層的上線文切換(content swith)工作,大大減少了系統性能的開銷。 ## 如何使用 **配置示例** ``` http { # other directives sendfile on; # other directives } ``` **指令說明** 語法:` sendfile on | off;` 默認值:` sendfile off;` 上下文:` http,server,location,if in location` 指定是否使用sendfile系統調用來傳輸文件。 > sendfile系統調用在兩個文件描述符之間直接傳遞數據(完全在內核中操作),從而避免了數據在內核緩沖區和用戶緩沖區之間的拷貝,操作效率很高,被稱之為零拷貝。 原理解釋:`read/write`在傳統的文件傳輸方式(read、write/send方式),具體流程細節如下: 1、調用read函數,文件數據拷貝到內核緩沖區 2、read函數返回,數據從內核緩沖區拷貝到用戶緩沖區 3、調用write/send函數,將數據從用戶緩沖區拷貝到內核socket緩沖區 4、數據從內核socket緩沖區拷貝到協議引擎中 5、在這個過程當中,文件數據實際上是經過了四次拷貝操作: > 硬盤—>內核緩沖區—>用戶緩沖區—>內核socket緩沖區—>協議引擎 ### sendfile sendfile系統調用則提供了一種減少拷貝次數,提升文件傳輸性能的方法。 * sendfile系統調用利用DMA引擎將文件數據拷貝到內核緩沖區,之后數據被拷貝到內核socket緩沖區中   * DMA引擎將數據從內核socket緩沖區拷貝到協議引擎中 這里沒有用戶態和內核態之間的切換,也沒有內核緩沖區和用戶緩沖區之間的拷貝,大大提升了傳輸性能。 這個過程數據經歷的拷貝操作如下: > 硬盤—>內核緩沖區—>內核socket緩沖區—>協議引擎
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看