2015-11-02 69 views
0

我有一個非常具體的問題。Blocking I/O操作在多線程C++應用程序中如何工作?

  1. 阻塞I/O操作如何recvfrom()調用工作在
    多線程應用程序?
  2. 操作系統如何調度阻塞系統調用的線程?
  3. 執行阻塞系統調用是否爲 (例如,類似於繁忙的等待?)時,操作系統是否會調度線程,或者只有系統調用返回時操作系統只有 才調度線程?
  4. 會導致中斷的執行線程(如果是這樣的 情況下,將是值得的互斥或某種原子操作中編寫的 其他線程的關鍵部分?)
+1

這個問題在哪裏非常具體? –

+3

哪個操作系統? (評論不夠長) – gurka

+0

@gurka有一點。例如,在Linux下,線程在處理調度時幾乎就像進程一樣處理。這在Windows上可能看起來有點不同,在沒有MMU的微控制器上運行的操作系統可能會有很大差異。 –

回答

2

阻塞I/O操作如何recvfrom()調用 多線程應用程序中的工作?

線程被阻塞,其他線程繼續被安排。這是開發多線程應用程序的主要優勢之一,即使在單核機器上也是如此。

操作系統如何調度阻塞系統調用的線程?

不是,直到系統調用返回。

執行阻塞系統調用時(例如,類似於繁忙的等待?),操作系統會調度線程嗎?或者系統調用返回後操作系統是否只調度線程?

第一,線程在系統調用時應該做些什麼?

一般來說,後者也可能是,但至少可以說這是一個非常奇怪的實現。事實上,假設你是調度器,所以你現在處於內核空間。在用戶空間中執行線程當前是而不是,因爲它等待系統調用返回。那麼線程將在哪裏「繼續」執行?

會導致中斷的執行線程(如果是這樣的話會是值得的互斥或某種原子操作內的代碼的其他線程的關鍵部分?)

那麼,這是一個阻塞調用:停止執行,直到阻塞條件已經過去。

+0

我甚至在想象如何調度程序安排在系統調用中被阻塞的線程時頭痛。如果它在系統調用中被阻塞,這意味着它在內核中並等待某事。內核對它的安排意味着什麼? – SergeyA

+0

@SergeyA:與「奇怪的實現」完全一樣:你可以設置你的系統調用接口,以便將該線程的執行指針設置爲立即返回內核空間的東西,但那樣會很「性能損耗。 –

+0

謝謝你們的答案。 –

相關問題