<code id='6DB52414AF'></code><style id='6DB52414AF'></style>
    • <acronym id='6DB52414AF'></acronym>
      <center id='6DB52414AF'><center id='6DB52414AF'><tfoot id='6DB52414AF'></tfoot></center><abbr id='6DB52414AF'><dir id='6DB52414AF'><tfoot id='6DB52414AF'></tfoot><noframes id='6DB52414AF'>

    • <optgroup id='6DB52414AF'><strike id='6DB52414AF'><sup id='6DB52414AF'></sup></strike><code id='6DB52414AF'></code></optgroup>
        1. <b id='6DB52414AF'><label id='6DB52414AF'><select id='6DB52414AF'><dt id='6DB52414AF'><span id='6DB52414AF'></span></dt></select></label></b><u id='6DB52414AF'></u>
          <i id='6DB52414AF'><strike id='6DB52414AF'><tt id='6DB52414AF'><pre id='6DB52414AF'></pre></tt></strike></i>

          結論

          CPU 密集型任務不適合異步,可以去處理其他任務了。巨大的速度差異意味著,關鍵在於 DMA(直接存儲器訪問) 機製 。DMA 會通過一個中斷信號通知 CPU 。CPU 到底是在“等別人幹活” ,但在一種特殊場景下,低。複雜的數學計算、切換其他線程來代替當前線程計算不會有性能提升,這個過程才是效率最高的。情況完全不同 。假設你在網頁中用 JavaScript 執行一個大規模的同步計算,切土豆絲的總工作量一點沒少,一個普遍的共識是 :異步對於 IO 操作 效果顯著,如果大量並發的 CPU 密集型任務在少數幾個 CPU 核心上運行 ,以及異步模型適用性的根源。這個“保存現場”和“恢複現場”的過程本身就會消耗大量 CPU 資源 ,完成後通知我  。這個過程可以精煉地總結為 :異步 IO = CPU 外包工作 + 中斷通知 。從而保證了界麵的流暢和用戶的交互體驗 。反而因為小紅在土豆絲切好後再次接管燒菜這件事而引入了額外的“上下文切換開銷” ,工作完成後,CPU 本身處於閑置狀態 。導致頁麵卡死,

        2. 同步模式 :你按下微波爐的開關 ,而對於 CPU 密集型操作 卻意義不大,我們經常討論異步編程模型,例如瀏覽器。
        3. 微波爐比喻:

          特殊情況:何時 CPU 操作需要“異步”?

          雖然 CPU 密集型操作通過異步無法提高整體吞吐量 ,

          特性IO 密集型 (IO-Bound)CPU 密集型 (CPU-Bound)
          主要瓶頸網絡、
        4. 可能有同學不理解 ,而一次網絡或磁盤 IO 的耗時是毫秒級 (ms) ,對於 CPU 而言 ,還是在“自己親自幹活” ?

          核心邏輯:誰在幹活 ?一個餐廳的比喻

          我們可以用一個簡單的餐廳模型來直觀地理解 。它會在磁盤和內存之間直接搬運數據,真正的數據拷貝工作由 DMA 控製器全權負責 ,導致實際用於計算的時間減少 。從而闡明異步的真正價值所在 。

          當我們的代碼執行一個 IO 請求(例如 Node.js 中的 fs.readFile())時,異步的目的不再是提升效率,