我正在创建一个GCD队列 dispatch_queue_t q1 = dispatch_queue_create(" com.s1",NULL);
并使用dispatch_async
在其上调度块GCD是否对运行的线程做出任何保证?我注意到它总是在后台线程上执行。是否有可能在主/ UI线程上执行它。 GCD如何决定运行什么线程?
答案 0 :(得分:6)
线程不是队列,反之亦然。
当您将块分派到GCD队列时,GCD会确保它们按照该队列的规则运行 - 串行或同时运行,具体取决于您创建队列的方式。 不保证它将使用哪个线程。它决定如何根据自己的内部逻辑运行。也无法保证给定的串行队列始终使用相同的线程。
唯一的例外是通过调用dispatch_get_main_queue
获得的主队列。这是一个在主线程上运行的串行队列。
如果您创建自己的队列,则在其上运行的块将不会在主线程/队列上运行。他们做运行的线程取决于GCD。