使用Grand Central Dispatch,可以轻松地在非主线程上执行耗时的任务,避免阻止主要攻击并保持UI响应.只需dispatch_async在全局并发队列上使用并执行任务即可.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// code
});
Run Code Online (Sandbox Code Playgroud)
然而,听起来好得令人难以置信,因为这个通常有它们的缺点.在我们的iOS应用程序项目中使用了很多之后,最近我们发现它有64个线程限制.一旦我们达到限制,应用程序将冻结/挂起.通过暂停应用程序与Xcode,我们可以看到主线程由semaphore_wait_trap.
在网上搜索确认其他人也遇到了这个问题,但到目前为止还没有找到解决方案.
达到调度线程硬限制:64(同步操作中阻塞的调度线程太多)
另一个问题计算器证实了这一问题时使用发生dispatch_sync和dispatch_barrier_async太.
问题:
由于Grand Central Dispatch有64个线程限制,有没有解决方法?
提前致谢!
关于GCD创建了多少个线程,是否有任何好的文档?在WWDC,他们告诉我们它是围绕CPU核心建模的.但是,如果我称这个例子:
for (int i=1; i<30000; i++) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSThread sleepForTimeInterval:100000];
});
}
Run Code Online (Sandbox Code Playgroud)
它打开66个线程,即使在iPad1上也是如此.(当本地调用Lion时,它还打开66个线程).为什么66?