2011-07-28 22 views
0

假設沒有線程的內核級支持。一個進程有10個線程在運行,其中一個請求I/O。關於用pthreads庫請求I/O的用戶線程

phread庫是否立即向內核聲明I/O請求或開始在其就緒隊列中執行線程? (如果它聲明它是I/O請求,那麼它將被CPU搶佔,因此呈現多線程無用於I/O密集型任務)。

回答

0

首先,我認爲雖然有10個線程「運行」,但實際上每次只有其中一個線程處於活動狀態。並且發生上下文切換以創建這種併發運行錯覺。

因此,只有實際運行的線程才能向內核發出I/O請求。 如果它阻塞I/O,是的,整個系統正在等待I/O響應。 如果是非阻塞I/O,內核將切換到下一個就緒線程並繼續執行。只有當I/O完成時,纔會生成中斷以通知內核上一個線程可以重新放回就緒隊列。

但是I/O密集型任務確實很慢。