0

我正在运行这段代码

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

});

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

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

4

2 回答 2

4

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

^{...}();
于 2013-02-07T01:54:38.287 回答
1

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

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

于 2013-02-07T01:53:06.887 回答