在线程上运行GCD队列

时间:2014-12-08 18:10:08

标签: ios grand-central-dispatch

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

并使用dispatch_async

在其上调度块

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

1 个答案:

答案 0 :(得分:6)

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

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

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

如果您创建自己的队列,则在其上运行的块将不会在主线程/队列上运行。他们运行的线程取决于GCD。