2014-05-25 135 views
0

我只是將線程添加到我多年來一直在開發的大型應用程序中。它用C語言編寫,可在Mac和Linux上運行。這個問題是關於OS X,10.8.2或10.6.8。在Mac OS X上執行線程,強制執行多個CPU

問題:我看到程序按照我的預期打開兩個線程。然而,顯然兩個線程都運行在同一個CPU上,或者至少,我從來沒有得到超過100%的CPU分配給該程序。這幾乎破壞了線程的全部目的。

我使用了相當數量的互斥鎖,如果這很重要的話。

如何強制操作系統在不同CPU的100%運行每個線程? (此機器上有8個CPU。)

+1

也許你的線程根本不會做任何會導致大負載的東西?也許你正在睡覺或等待其他事件過多(使用過多的互斥體可能意味着線程化設計不是最好的)? –

+0

你的目標有缺陷。 –

+0

Joachim Pileborg:謝謝你的回答。這兩個線程都做了很多工作。沒有睡覺。我的感覺是,等待互斥的時間百分比非常小。 – rfermat

回答

2

互斥體在這裏可能很重要。將其設置爲「記錄所有線程狀態」後,打開儀器並在程序上運行時間剖析儀。這將讓你看到你的線程阻塞在哪裏等待(可能是互斥體)而不是運行。

+0

感謝您的建議。我從來沒有聽說過「時間輪廓儀」或「樂器」。顯然它是Xcode 4的一部分;我有3.2.6。 – rfermat

+0

3.2.6也應該有。只需打開樂器並觀看。這是平臺上的*主要*性能工具,您需要最終了解它。 –

0

多個運行線程將併發只要它們在不同的核心上執行 - 每個核心在每個類Unix操作系統中都有自己的調度程序實例。 在單獨的CPU裸片上事情很少:如果事實上,在同一裸片的不同核上運行的線程之間共享資源是有益的。

+0

感謝您的回覆,但我不明白你的意思。這是一個錯字:「在單獨的CPU死亡事情很少」?我假設你的意思是「獨立的CPU很少」,因爲線程將在不同的內核上。但是我似乎讓兩個線程在同一個處理器上交替運行,沒有並行性。 – rfermat

+0

@ rfermat CPU芯片是物理硅。芯片可能有一個或多個核心,同一芯片上的核心通常共享更高級別的高速緩存。我們使用'core'和'die'這樣的特定術語來避免混淆,因爲不同的工具對'processor'和'CPU'有不同的方法。另見http://superuser.com/questions/324284/what-is-meant-by-the-terms-cpu-core-die-and-package – mikemaccana