2014-10-28 49 views
0

我正在尋找在Swift中多線程代碼,但我想知道GCD如何處理線程。我創建的每個新線程是否都會自動在單獨的核心上運行(如果可用),還是使用其他機制將線程分配給核心?在iOS/Mac上通過GCD進行多線程

基本上我想要的是防止我在同一個核心上同時運行創建的新線程;我想保證它們在不同的核心上(再次,在它們可用的情況下)。

我不是爲App Store編寫應用程序或任何應用程序,我只是需要它在多核計算機上的不同內核上運行這些線程。從我在網上可以找到的信息來看,GCD自行決定是否在不同內核上運行線程,但我無法確定這是否僅僅基於可用性或完全基於其他內容。謝謝。

+1

它取決於許多參數,請比較http://stackoverflow.com/a/23787746/1187415。 – 2014-10-28 18:43:03

回答

2

如果您使用的大,中央調度API(dispatch_async等),或使用GCD(如NSOperationQueue)高級API,GCD會挑選最好的線程你,所以你最好的核心,取決於各種因素。您只能控制GCD隊列,而不是線程或處理器核心。

您也可以使用NSThread創建自己的線程,但通常不建議這樣做,除非您需要在預GCD操作系統上運行代碼。我認爲保證兩個不同內核的唯一方法是在mainThread上運行一些代碼,另一個代碼在分離的線程上運行。據我所知,你所要求的更細粒度的控制不能通過公共API來使用。 (我相當肯定它可能使用私有API,但我不知道如何)。