如果dispatch_sync不使用不同的线程,它可以更快吗?

我正在运行这个代码

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSLog(@"Main Thread? %d", [NSThread isMainThread]); // non-trivial non-UI code here }); 

NSLog表明我实际上是在主线程上,但是…我的印象是,如果我使用dispatch_sync (而不是什么),非平凡的非UI代码运行速度会快得多。

如果它在主线程上运行,有什么办法可以更快?

全局并发GCD队列没有sorting,将其中的一个传递给dispatch_sync()是一个noop,在这种情况下dispatch_sync()将直接执行指定的块,就好像你写了

 ^{...}(); 

通过限制运行的线程数,在技术上确保你可以提高性能,但是这不被推荐。 如果您的任务需要大量时间(实质性的意义,用户体验是否会受到无响应的用户界面的影响),那么只需使用dispatch_async或内联块(闭包)使用新线程即可。 最好的select是优化你的algorithm,以提高你的任务的长度。

通过在主线程上运行,您不会注意到速度上的显着差异。