2013-12-19 50 views
3

我是否正確,如果你有例如四個CPU和四個線程,這些分配到每個CPU上?而當你有五個線程時,一個CPU必須一次處理兩個線程?線程如何處理?

在此先感謝:)

+0

理論上,是的。在實踐中,你可以有一個CPU擁有分配給它的所有線程,多個CPU擁有多個線程,其他CPU擁有多個線程或者其他任何組合。 –

+5

沒有保證。你的操作系統可以隨你的線程做任何事情。 –

+1

線程不一定建模並行:它們建模*邏輯*併發性,而不*實際*併發性。當你有多個線程時,你告訴操作系統你有同樣的事情要做(邏輯上)。它可以接受這些指令並嘗試通過將它們拆分到不同的CPU來運行它們。但是一些處理器也可以做這樣的事情,如果一個操作需要10個週期才能完成,啓動它並在其運行時從另一個線程執行操作(「超線程」)。或者在開始下一個工作之前,一個啞巴系統可以運行1個線程完成。 – IdeaHat

回答

2

唯一保證你得到的是,線程將獨立運行彼此。調度是由操作系統完成的,操作系統通常會嘗試使所有內核都處於繁忙狀態,但由於計算機上的運行量遠遠超過程序,因此不能保證您的四個線程始終運行在四個內核上。

在Windows上,您可以將線程固定到處理器核心,但這既不是標準的也不是跨平臺的,並不總是對您的程序有好處。

+1

*並且操作系統通常會嘗試使所有內核忙碌*:取決於在「經濟」模式下的筆記本電腦,僅僅通過幾條指令即可喚醒內核將是浪費。 –