我可以用一個例子更好地解釋這個問題,所以我正在使用它?線程是否在用戶進程中獲得自己的時間片?
假設我們的系統是循環調度系統,每個時間間隔執行10ms。如果我們在程序中創建了兩個線程,每個線程都會執行10ms,或者兩個線程都執行10ms?
如果他們組合了10ms,那麼誰管理線程之間的上下文切換?
注:我不是在說這裏的內核線程。
我可以用一個例子更好地解釋這個問題,所以我正在使用它?線程是否在用戶進程中獲得自己的時間片?
假設我們的系統是循環調度系統,每個時間間隔執行10ms。如果我們在程序中創建了兩個線程,每個線程都會執行10ms,或者兩個線程都執行10ms?
如果他們組合了10ms,那麼誰管理線程之間的上下文切換?
注:我不是在說這裏的內核線程。
在Linux中,線程與系統中的每個其他線程競爭CPU。在POSIX術語中,線程具有系統爭用範圍。
因此,對於您的示例,每個線程將獲得10ms。
您可以通過檢查:
pthread_attr_setscope
)的爭用範圍屬性PTHREAD_SCOPE_PROCESS
- 應該導致錯誤。pthread_getattr_np
獲得一個線程attrbutes並通過pthread_attr_getscope
是 爭範圍檢查是PTHREAD_SCOPE_SYSTEM
是他們也確實有一個時間片。
在linux中,線程vye用於內存,CPU等資源或正在等待發生某些I/O事件。這些線程根據資源的可用性經歷各種狀態,如空閒,活動,準備就緒。這一切工作都由「流程管理子系統」來完成,流程管理子系統由流程調度器組成,並管理流程執行及其狀態。 也可以操作進程可以保存像CPU這樣的資源的時間段。 或者進程的優先級可以改變(例如「nice」)。
-Sumeet
我想,既然每個線程視爲一個任務,所以每個線程將獲得它自己的時間片即10毫秒的時間間隔。切換基於時間片進行。 –