Ios 调度到并发队列会导致在主线程上执行吗?

Ios 调度到并发队列会导致在主线程上执行吗?,ios,multithreading,cocoa-touch,grand-central-dispatch,Ios,Multithreading,Cocoa Touch,Grand Central Dispatch,苹果公司的GCD文件说明如下: GCD提供并管理应用程序可以访问的FIFO队列 以块对象的形式提交任务。提交给 调度队列在完全由服务器管理的线程池上执行 系统。不保证任务在哪个线程上执行 执行。GCD提供三种队列: 这是否意味着即使我发出请求,如 dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{...}); 它可能导致在主线程上执行代码块?在这种情况下,似乎使用主线程上的并发队列调用disp

苹果公司的GCD文件说明如下:

GCD提供并管理应用程序可以访问的FIFO队列 以块对象的形式提交任务。提交给 调度队列在完全由服务器管理的线程池上执行 系统。不保证任务在哪个线程上执行 执行。GCD提供三种队列:

这是否意味着即使我发出请求,如

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{...});
它可能导致在主线程上执行代码块?在这种情况下,似乎使用主线程上的并发队列调用dispatch_sync会导致死锁情况,在这种情况下,主线程会一直等待自己


我对GCD文档的解释正确吗?

是的,如果调用者在主线程上,则向全局队列发送同步可能意味着在主线程上执行代码。调度同步的文档说明:

作为优化,此函数在可能的情况下调用当前线程上的块


由于dispatch\u sync等待块完成,因此块是在并发线程上执行还是在主线程上执行实际上没有多大区别;主线程仍然被阻塞

因此,从主线程调用dispatch_sync有效地阻止了主线程,直到块完成为止,因此,除非块只在短时间内执行,否则这是一个坏主意