GCD中的线程和队列之间有什么关系?

Xin Yuan
  1. 一个线程仅包含一个队列?
  2. 如果我异步向globalQueue调度一个块,它是否可以在主线程上运行?
  3. 什么样的情况会导致dispatch_sync死锁?
工藤CC

1.一个线程仅包含一个队列吗?

关系是一种方式。串行队列可以容纳一个线程来执行分配给它的块,但是线程不知道队列。好吧,主线程很特殊,它知道主队列。

我猜

调度队列并不指示它将在哪个线程上运行块或函数,我认为调度队列管理着一个包含许多线程的线程池,当调度一个块时它将获取一个空闲线程。因此,一个线程可以在一段时间内为许多调度队列工作。

但是可以肯定的是:当您将一个块分派到队列中时,该块在其上运行的线程可以为一个确定的分派队列工作,您可以使用来获取它dispatch_get_current_queue

2.如果我异步地将一个块分配给globalQueue,它是否可以在主线程上运行?

我认为它不会在主线程上对globalQueue运行任何块,因为它无法评估该块的执行时间,如果是长时间的工作,它将阻塞主线程。

3.哪种情况会导致dispatch_sync死锁?

我引用了 Concurrency programming guide

您永远不要从正在计划传递给该函数的队列中执行的任务中调用dispatch_sync或dispatch_sync_f函数。这对于保证死锁的串行队列特别重要,但对于并发队列也应避免。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章