我正在使用NSOperationQueue編寫我的第一個多線程iPhone應用程序,因爲我聽說它的加載速度比管理我自己的線程調度的速度更快並且可能更快。NSOperationQueue緩慢調度線程嗎?
我正在計算一個生命遊戲板的結果,將板分成單獨的部分,並有單獨的線程計算每塊板,然後將它們拼接在一起,對我來說,這似乎是一個更快的方式,即使有巨大的開銷分裂和拼接。我爲每個板創建一個NSInvocationOperation對象,然後將它們發送到OperationQueue。在我發送了所有棋盤後,我坐下來等待它們全部完成計算,並調用OperationQueue的waitUntilAllOperationsAreFinished調用。
這看起來應該可以工作,而且它工作得很好,但是線程會調用非常slooooowwwlllyyyyyy,所以它實際上最終會花費比多線程版本更長的時間來計算,而不是單線程版本! OH NOES!我監視了發送給NSOperationQueue的NSOperations的創建和終止情況,發現有些人在稍後被調用之前就坐在Operation Queue do-diddly-daddlin一段時間。起初我以爲「嘿,也許這個隊列一次只能處理那麼多線程」,然後把隊列maxConcurrentOperationCount加到一些任意高的數字(遠遠高於棋子數量),但是我經歷了同樣的事情!
我想知道是否有人可以告訴我如何將NSOperationQueue踢到「超速驅動」,以便儘快發送它的隊列,或者告訴我發生了什麼事!
值得指出的是,沒有商業可用的iPhone可以同時運行兩個線程。他們都是單核心芯片。對於CPU限制的任務,線程是浪費時間。 – 2010-08-05 14:08:40
好點。即使A4仍然是一個單核心處理器。 http://en.wikipedia.org/wiki/Apple_A4 – 2010-08-05 14:38:03