2015-11-06 358 views
-2

據我所知,在多對一映射中,一個內核線程管理許多用戶線程。這個內核線程可以幫助用戶線程使用系統調用等什麼我不明白的是:用戶線程與內核線程的多對一映射

  1. 爲什麼我們有很多一對一的映射,如果一個阻塞調用會 塊中的所有用戶線程由管理內核線程?
  2. 在用戶線程與內核線程的多對一映射中,用戶線程的所有 必須來自相同的進程嗎?
  3. 在多對一映射中,所有用戶線程可以同時運行在不同的內核/ CPU上,還是一次只能運行其中一個?
+0

Google搜索有什麼問題?例如,[第四個參考](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html):'如果阻塞的系統調用被完成,那麼整個過程阻塞''因爲一個單個內核線程只能在單個CPU上運行,多對一模型不允許單個進程在多個CPU中拆分。 – Tsyvarev

+0

在投票回答問題之前,我建議你閱讀所有的子問題,以確保你在谷歌或其他地方的某個地方有答案。僅供參考,我無法在Google上找到他們,因此發佈在此處。另外,子問題有些相關。 – Viraj

+0

其實,[參考](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html)我提供了包含所有問題的答案:1.線程管理由線程處理用戶空間中的庫,這是非常有效的。 2.'多線程應用程序在單個進程中有多個線程,每個線程都有自己的程序計數器......'3.因爲單個內核線程只能在單個CPU上運行......'。是的,細節的程度因不同的問題而有所不同,但這是因爲你一次有幾個細節。 – Tsyvarev

回答

2

1)爲什麼我們有很多一對一的映射,如果一個阻塞調用會 塊中的所有用戶線程內核線程管理?

當在線程之間有上下文切換時,具有一對一映射的缺點是內核參與。內核結果涉及幾個開銷。

2)在很多一對一的映射用戶線程的內核線程,做所有 用戶線程都從同一個進程?

3)在許多對一映射,可以將所有的用戶線程對不同 核/ CPU上執行或僅它們中的一個在一個時間運行?

具有多對一映射的pro功能是整個線程上下文切換由您使用的用戶級線程庫維護,並且就內核而言,它不知道您有多少線程讓它給進程一個時間片來執行,並由線程庫來控制任何線程。由此可以很容易地看到,在多對一的映射中,只有一個線程可以獲得控制權。

+0

這個問題每月大約出現一次。這是'爲我做的所有工作':( –

+0

清除我所有的疑惑,謝謝。 – Viraj