<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                經典面試題 從一個文件中讀出數據并將數據傳到另一臺服務器上,涉及到幾次數據拷貝? ``` `File.read(file, buf, len);` `Socket.send(socket, buf, len);` ``` ![](https://img.kancloud.cn/f1/d2/f1d28cc587a967e9a6e47c13b0e2f67b_898x632.png) 1、應用程序中調用 `read()`?方法,這里會涉及到一次上下文切換(用戶態->內核態),底層采用DMA(direct memory access)讀取磁盤的文件,并把內容存儲到內核地址空間的讀取緩存區。 2、由于應用程序無法訪問內核地址空間的數據,如果應用程序要操作這些數據,得把這些內容從讀取緩沖區拷貝到用戶緩沖區。?`read()`?調用的返回引發一次上下文切換(內核態->用戶態),現在數據已經被拷貝到了用戶地址空間緩沖區,如果有需要,可以操作修改這些內容。 3、我們最終目的是把這個文件內容通過Socket傳到另一個服務中,調用Socket的 `send()`方法,又涉及到一次上下文切換(用戶態->內核態),同時,文件內容被進行第三次拷貝,這次的緩沖區與目標套接字相關聯,與讀取緩沖區無關。 4、 `send()`調用返回,引發第四次的上下文切換,同時進行第四次拷貝,DMA把數據從目標套接字相關的緩存區傳到協議引擎進行發送 ***整個過程中,過程1和4是由DMA負責,并不會消耗CPU,只有過程2和3的拷貝需要CPU參與***
                  <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>

                              哎呀哎呀视频在线观看