簡單回答就是:不是不需要是需要很少
先不談傳統的5大io模型,先說說併發(concurrence)。乙個非常不嚴謹的解釋就是同時做a和b兩件事。先做一會兒程序a,然後上下文切換,再做一會兒b。過一會兒在切回來繼續做a。因此給我們造成乙個假象,我們同時在做a和b兩件事。這就是著名的程序模型。
但是,如果計算機內部不止cpu乙個部件在工作呢?如果a這件事cpu可以分派給其他部件幫它完成呢?情況是不是就完全不一樣了?系統io正好是這樣乙個完美的例子。
對於磁碟io,真實發生的場景可能是這樣的:
cpu說:硬碟兄幫我把我要看的小電影拷貝乙份到主存,謝謝,親。所以,正因為這樣派發任務,通訊,等待的過程,併發系統才彰顯出它的意義。當然實際過程可能比這個複雜一萬倍。比如cpu是不會直接和硬碟對話的,他們之間有個中間人,叫dma(direct memory access)晶元.硬碟說:好的!我考完了叫你。
cpu說:麼麼噠!那我打遊戲去啦!
…cpu打擼啊擼 (100納秒過去了)
…硬碟說:小c我考完了。
cpu說:電影我來啦!
cpu計算檔案位址 ==> 委派dma讀取檔案 ==> dma接管匯流排 ==> cpu的a程序阻塞,掛起 ==> cpu切換到b程序 ==> dma讀完檔案後通知cpu(乙個中斷異常) ==> cpu切換回a程序操作檔案dma控制器類似於乙個小的cpu, 有自己的暫存器(記錄主存位址和取到的字的count等).
cpu可以發起乙個dma請求, 傳入讀寫操作型別, 相關i/o裝置位址, 記憶體的起始位址, 要操作的字數.然後dma就可以獲取匯流排的控制權, 將一大塊記憶體和外部i/o讀入或寫出.等操作完成後, 再通知cpu. 釋放匯流排控制權.缺點是:系統匯流排也是一種資源, dma操作期間, 當處理器需要訪問匯流排時, 執行速度會變慢.但是總得來說, dma是一種高效傳輸方式.
i/o會一直占用cpu嗎?
為何io操作不需要cpu?
python為什麼不需要swap a,b
關鍵字 python swap 致 謝 這是一篇譯稿,原作者是一位nasa的程式設計師,非常感謝他在python社群及時 詳細的為我解答了問題,並在講解中解說了一些python的相關知 識,還寬容的對待我蹩腳的英語。感謝他同意我將他的來信介紹給大家。這是一位謙和有禮又博學多才的朋友。他幫我理解pyt...
為什麼 Linux 不需要碎片整理
想要知道為什麼在正常使用中,linux檔案系統不需要進行碎片整理,而windows要。你需要了解為什麼會生成碎片,而linux和windows這兩個檔案系統,它們分別是如何工作的。什麼是碎片 許多windows使用者,即使沒有太多經驗,我相信他們也會定期進行碎片整理,來加速其電腦。為什麼要這麼做,許...
為什麼Linux不需要碎片整理?
出處 極客範 如果你是乙個linux使用者,你可能會聽說linux的檔案系統不需要碎片整理。你也可能會注意到linux的發行版本也都沒有磁碟碎片整理的功能。這是為什麼呢?linux系統中沒有 磁碟碎片整理 功能 要理解為什麼linux的檔案系統不會想windows的檔案系統一樣產生碎片,你首先要明白...