2017-01-09 119 views
0

E.g,我在linux上有4個進程,每個包含5個pthread線程,而我的cpu是i7 4C8H。Linux內核線程在CPU硬件線程上映射1:1或m:n嗎?

問題

(1)對於每一個進程,它限制了所有線程的功耗僅爲1 CPU線程?一個進程可以使用所有的cpu核心/線程嗎? (2)Linux內核是否平等地爲每個進程分配時間片(如果它們都是繁忙的,不'指定和優先級),或者按照它們的線程號分配時間片,進程的線程越多,更多時間片?

回答

1

1)的一種方法可以很容易地使用所有可用的核/超線程您的處理器上,通過簡單地產卵多個線程或進程,並使其執行任何種類的計算(例如,無限循環)。內核的調度程序通常會嘗試傳播所有可用資源上的負載。

2)我不知道有一種機制可以爲具有更多線程的進程分配更多時間。我相信每個線程都將被調度器視爲一個單獨的可運行實體,並將參與標準時間片切換舞蹈。特別是,Linux的當前調度程序(CFS - Completely Fair Scheduler)非常難以在所有進程/線程之間公平地分配時間片

1

1)進程的線程可以在多個CPU /內核中並行運行。如果一次只能運行一個線程,那麼多線程不會非常有用!默認情況下,內核可以並將在任何可用內核上安排線程。其他線程,即使是運行在另一個內核上的同一進程的一部分也沒有區別。

有一個cpuset系統,您可以將線程鎖定到某些可用核心子集。您可能需要某個進程的所有線程才能在某個核心上運行。見pthread_getaffinity_np()

2)線程,而不是進程,是Linux中的基本調度實體。所以是的,擁有更多線程的進程將獲得更大的CPU份額!你在問什麼是PTHREAD_SCOPE_SYSTEM vs PTHREAD_SCOPE_PROCESS請參閱pthread_attr_setscope()。 Linux線程(NPTL)不支持後者。另請參閱pthread_setconcurrency(),因爲Linux是1:1,所以在Linux上也不會執行任何操作。

但是,Linux確實支持一種稱爲「組調度」的概念。研究這種方法是爲了在具有不同數量的線程的進程之間實現公平性。