讀資料執行緒失去CPU控制權後,誰來讀取資料?

2021-08-19 05:11:20 字數 536 閱讀 4172

本文**,加以補充! 

linux系統下的io預設是阻塞io,阻塞i/o的定義:執行緒在執行i/o 操作如磁碟讀寫或網路通訊,通常要耗費較長的時間,結果返回之前,當前執行緒會被掛起(作業系統會剝奪這個執行緒的 cpu 控制權,使其暫停執行,同時將資源讓給其他的工作執行緒,執行緒進入非可執行狀態,在這個狀態下,cpu不會給執行緒分配時間片,即執行緒暫停執行)。函式只有在得到結果之後才會返回。當 i/o 操作完畢時,作業系統將這個執行緒的阻塞狀態解除,恢復其對cpu的控制權,令其繼續執行。

那麼問題來了:比如讀取乙個txt,由於耗時,執行緒被掛起,該執行緒既然失去了cpu控制權,那這個對txt的處理是誰做的呢,難道還有另外乙個cpu不成?

答:硬碟來做。

詳細內容檢視

還需要說麵的一點是cpu不會直接訪問硬碟上的資料,cpu應該是訪問記憶體中的資料,也就是說,硬碟讀取資料完畢後,將資料送到匯流排介面處,接下來資料會儲存到記憶體,而不是cpu直接處理。資料儲存到記憶體之後,cpu才會去處理。

java多執行緒,如何防止髒讀資料

多執行緒容易 非執行緒安全 的情況,是由於用了全域性變數,而又沒有很好的控制起情況。所以無論做什麼程式,謹慎使用全域性變數 非執行緒安全 其實會在多個執行緒對同乙個物件中的例項變數進行併發訪問時發生,產生的後果就是 髒 讀。如以下 就會出現 髒 讀的情況 package com.ming.threa...

讀資料保持

always posedge clk or negedge rst b if rst b ram ren d1 1 b0 else ram ren d1 ram ren always posedge clk or negedge rst b if rst b ram dout d1 else ram...

記憶體讀資料和磁碟讀資料的區別

當程式要讀取的資料時傳入記憶體位址 行位址 列位址 如果資料不在主存中時,會觸發乙個缺頁異常,此時系統會向磁碟發出讀盤訊號,通過柱面號,磁頭號,扇區號定位磁碟位置,找到資料的起始位置並向後連續讀取一頁或幾頁載入記憶體中。於儲存介質的特性,磁碟本身訪問就比主存慢很多,再加上機械運動耗費,磁碟的訪問速度...