我正在使用 NSOperationQueue 编写我的第一个多线程 iPhone 应用程序,因为我听说它比管理我自己的线程调度更好并且可能更快。
我正在计算生命游戏板的结果,方法是将板分成单独的部分,让单独的线程计算每个板,然后将它们拼接在一起,对我来说,这似乎是一种更快的方法,即使分割和拼接的开销很大. 我正在为每个板创建一个 NSInvocationOperation 对象,然后将它们发送到 OperationQueue。在我发送了所有的板子后,我坐下来等待它们都完成对 OperationQueue 的 waitUntilAllOperationsAreFinished 调用的计算。
这似乎应该可以工作,并且确实可以正常工作,但是线程被调用得很慢,因此实际上多线程版本的计算时间比单线程版本要长!哦不!我监视了发送到 NSOperationQueue 的 NSOperations 的创建和终止,发现有些只是在 Operation Queue do-diddly-daddlin 中坐了一会儿,然后才被调用。起初我想“嘿,也许队列一次只能处理这么多线程”,然后将队列 maxConcurrentOperationCount 提高到某个任意高的数字(远高于板件的数量),但我遇到了同样的事情!
我想知道是否有人可以告诉我如何将 NSOperationQueue 踢到“超速”状态,以便它尽快调度其队列,或者告诉我发生了什么!