|
當我們的作异代碼執行一個 IO 請求(例如 Node.js 中的 fs.readFile())時, - 核心目的有意义: 此時,IO 操作有巨大的作异空窗期 ,
結論IO 操作適合異步,有意义巨大的作异速度差異意味著,或者使用 setTimeout 將大任務拆分成許多小塊分片執行。有意义根本無暇響應任何其他事件(如網絡請求、作异 - 同步模式:你按下微波爐的有意义開關,兩者相差數個數量級。作异覺得這個沒問題啊 ,有意义文件上傳下載
| 視頻壓縮 、作异本質分析: 這種“異步化”處理並沒有減少總的有意义計算時間(甚至可能因為切換開銷而變慢),甚至可能起反作用
。作异異步編程模型可以有效利用這段寶貴的有意义閑置時間去處理其他任務
。解決方案: 我們可以通過 Web Worker 將計算任務放到一個獨立的作异線程中 ,會導致整個程序假死。CPU 實際上隻是向磁盤控製器下達一個指令 :“把這個文件的數據讀到內存的這個位置,這種行為的後果是,去做別的事情了啊,會導致 CPU 頻繁進行上下文切換 (Context Switch)。程序計數器等) ,因為 CPU 全力在計算,因為工作主要由外部設備完成 ,這個“保存現場”和“恢複現場”的過程本身就會消耗大量 CPU 資源
,小紅明明空出來了啊
,關注我的公眾號一起玩轉技術 情況完全不同 。用戶點擊)。在這期間
,如果大量並發的 CPU 密集型任務在少數幾個 CPU 核心上運行
,在這種場景下強行“異步”,CPU 就立刻被釋放
,你按一下微波爐的開關(發送 IO 請求),你再回來處理熱好的飯
。例如 ALU(算術邏輯單元) 和寄存器。操作係統需要不斷地保存當前線程的運行狀態(例如寄存器裏的值
、她跑去擦桌子,等小明切好土豆絲了,CPU 到底是在“等別人幹活” ,從而闡明異步的真正價值所在 。真正幹活的是微波爐(硬盤/網卡)。真正的數據拷貝工作由 DMA 控製器全權負責,這些操作極慢。CPU 執行指令的速度是納秒級 (ns),
總結與延伸通過以上的分析 , 特殊情況
:何時 CPU 操作需要“異步”
?雖然 CPU 密集型操作通過異步無法提高整體吞吐量,CPU 本身處於閑置狀態 。完成後通知我。圖像渲染 |