<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國際加速解決方案。 廣告
                關于異步 I/O ,向前端工程師解釋起來或許會容易一些,因為發起Ajax調用對于前端工程師而言是再熟悉不過的場景了。下面的代碼用于發起一個Ajax請求: ~~~ $.post('/url', {title:'深入淺出Node.js'}, function(data){ console.log('收到響應'); }) console.log('發送Ajax結束'); ~~~ 熟悉異步的用戶必然知道,“收到響應”是在“發送Ajax結束”之后輸出的。在調用 $.post() 后,后續代碼是被立即執行的,而“收到響應”的執行時間是不被預期的。我們只知道它將在這個異步請求結束后執行,但并不知道具體時間點。異步調用中對于結果值的捕獲是符合“Don't call me,I will call you”的原則的,這也是注重結果,不關心過程的一種表現。下圖是一個經典的Ajaxe調用: ![](https://box.kancloud.cn/2016-08-25_57bdc8fa78718.png) 在Node中,異步 I/O 也很常見。以讀取文件為例,我么可以看到它與前端Ajax調用的方式是極其類似的: ~~~ const fs = require('fs'); fs.readFile('/etc/passwd',(err, data)=>{ if(err) throw err; console.log('讀取文件完成'); }) console.log('發起讀取文件'); ~~~ 這里的“發起讀取文件”是在“讀取文件完成”或 throw err 之前輸出的。同樣,“讀取文件完成”或 throw err 執行,也取決于讀取文件的異步調用何時結束。下圖是一個經典的異步調用: ![](https://box.kancloud.cn/2016-08-25_57bdc8faa7b29.png) 在Node中,絕大多數的操作都是以異步的方式進行調用。Ryan Dahl排除萬難,在底層構建了很多異步 I/O 的API,從文件讀取到網絡請求等,均是如此。這樣的意義在于,在Node中,我們可以從語言層面很自然的進行 并行 I/O 操作。每個調用之間無需等待之前的 I/O 調用結束。在編程模型上可以極大提升效率。 下面的兩個文件讀取任務的耗時,取決于最慢的那個文件讀取的耗時: ~~~ fs.readFile('/path1',(err, data)=>{ console.log('讀取文件1完成'); }); fs.readFile('/path2',(err, data)=>{ console.log('讀取文件2完成'); }); ~~~ 而對于同步 I/O 而言,它們的耗時是兩個任務的耗時之和。這里異步帶來的優勢是顯而易見的。 關于異步I/O 如何提升效率及其本身的機制和實現,我們將在第3章中詳述。
                  <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>

                              哎呀哎呀视频在线观看