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

时间:2013-02-07 01:43:45

标签: ios grand-central-dispatch

我正在运行此代码

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代码运行得更快没什么。)

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

2 个答案:

答案 0 :(得分:4)

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

^{...}();

答案 1 :(得分:1)

通过限制运行的线程数,从技术上讲,您可以确保提高性能,但不建议这样做。如果您的任务需要花费大量时间(具体意义,用户体验会受到无响应的UI的影响),那么只需使用dispatch_async或内联块(闭包)的新线程。最佳选择是优化算法以改善任务的长度。

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