io會一直占用cpu嗎?
這是乙個很好的關於併發/並行系統的問題。簡單回答就是:io所需要的cpu資源非常少。大部分工作是分派給dma(direct memory access)直接記憶體訪問完成的。先不談傳統的5大io模型,先說說併發(concurrencey)。乙個非常不嚴謹的解釋就是同時做a和b兩件事。先做一會兒程序a,然後上下文切換,再做一會兒b。過一會兒在切回來繼續做a。因此給我們造成乙個假象,我們同時在做a和b兩件事。這就是著名的程序模型。這看上去很炫酷,但實際上並沒有任何卵用。因為a,b兩件事你都得做完不是?不論你是做完a再做b還是來回切換,花得時間應該是一樣的。甚至還要更多,因為還要考慮到上下文切換的開銷。
如果計算機內部不止cpu乙個部件在工作呢?如果a這件事cpu可以分派給其他部件幫它完成呢?情況是不是就完全不一樣了?
系統io正好是這樣乙個完美的例子。對於磁碟io,真實發生的場景可能是這樣的:
假設原先讀取檔案cpu需要傻等50納秒。現在儘管兩次上下文切換要各消耗5納秒。cpu還是賺了40納秒時間片。一看上面這張圖就知道,剛才講的是傳統5大io模型中的「非同步io」的大致過程。計算機硬體上使用dma來訪問磁碟等io,也就是請求發出後,cpu就不再管了,直到dma處理器完成任務,再通過中斷告訴cpu完成了。所以,單獨的乙個io時間,對cpu的占用是很少的,阻塞了就更不會占用cpu了,單執行緒環境下會導致程式都不繼續執行了,在多執行緒環境下,cpu會把時間交給其它執行緒和程序了。
那麼問題來了,這個io操作會阻塞多久?cpu什麼時候會切回到原執行緒並繼續執行?
這裡涉及到上文提到的io通訊模型。雖然io不會占用大量的cpu時間,但是非常頻繁的io還是會非常浪費cpu時間的,所以面對大量io的任務,有時候是需要演算法來合併io,或者通過cache來緩解io壓力的,使用良好的通訊模型也會大大提高我們的**的執行效率。
PowerShell一直占用CPU100 解決方法
powershell是windows自帶的一款,乙個不小心就會占用cpu資源100 的exe。1.任務管理器中發現powershell占用cpu幾乎100 windows其他程式和動作基本無法正常執行。2.起初右鍵點 結束程序 就可以關閉,發展到後來右鍵 結束程序 也仍存在一堆堆powershell...
會自動安裝cuda嗎 消防水炮會一直自動巡檢嗎
很多客戶對於消防水炮滅火系統工作流程是不陌生的,不過在一些介紹中可能大家聽到過這樣的描述,水炮發現火源以後,會自動定位火源位置,然後開啟電磁閥,發出報警訊號的同時噴射水柱滅火,等到火源被撲滅後會自動巡檢,查詢周圍是否存在其他火源,那麼有些客戶就存在疑問了 消防水炮會一直自動巡檢嗎?這個問題今天就給大...
沒有人會一直等你
第一篇 匆匆那年 第二篇 兩不相欠,彼此才都好過 第三篇 沒有人會一直等你 第三篇 沒有人會一直等你 凌晨困入乙個夢魘。夢境裡我與所有認識的人決裂。嘴裡纏繞惡毒話語,我撕心裂肺的哭喊著,手臂毫無章法的揮舞著。頹廢 瘋狂 崩潰。相識的人漠然的從我身旁走過,好似在走出我的生命。最後我獨自陷入無盡的黑洞。...