相关疑难解决方法(0)

Grand Central Dispatch中线程限制的解决方法?

使用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_syncdispatch_barrier_async太.

问题:
由于Grand Central Dispatch有64个线程限制,有没有解决方法?

提前致谢!

objective-c grand-central-dispatch ios

32
推荐指数
1
解决办法
9311
查看次数

GCD创建的线程数?

关于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?

grand-central-dispatch ios

26
推荐指数
1
解决办法
8790
查看次数

标签 统计

grand-central-dispatch ×2

ios ×2

objective-c ×1