在线程上运行GCD队列

shr*_*sva -2 grand-central-dispatch ios

我正在使用dispatch_queue_t创建一个GCD队列q1 = dispatch_queue_create("com.s1",NULL);

并使用dispatch_async在其上调度块

GCD是否对运行的线程做出任何保证?我注意到它总是在后台线程上执行.是否有可能在主/ UI线程上执行它.GCD如何决定运行什么线程?

Tom*_*ton 7

线程不是队列,反之亦然.

当您将块分派给GCD队列时,GCD会确保它们按照该队列的规则运行 - 串行或同时运行,具体取决于您创建队列的方式.它不保证它将使用哪个线程.它决定如何根据自己的内部逻辑运行事物.也无法保证给定的串行队列始终使用相同的线程.

唯一的例外是通过调用获得的主队列dispatch_get_main_queue.这是一个在主线程上运行的串行队列.

如果您创建自己的队列,则在其上运行的块将不会在主线程/队列上运行.什么的线程,他们运行在高达GCD.