gpt4 book ai didi

ios - GCD中线程和队列是什么关系?

转载 作者:可可西里 更新时间:2023-11-01 05:44:18 26 4
gpt4 key购买 nike

  1. 是否一个线程只包含一个队列?
  2. 如果我向 globalQueue 异步分派(dispatch)一个 block ,它是否有机会在主线程上运行?
  3. 什么样的情况会导致dispatch_sync死锁?

最佳答案

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

关系是一种方式。串行队列可能持有一个线程来执行分派(dispatch)给它的 block ,但线程不知道队列。嗯,主线程比较特殊,它知道主队列。

我的猜测

Dispatch queue 并没有指明它将在哪个线程上运行 block 或函数,我认为 dispatch queue 管理一个包含许多线程的线程池,它会在一个 block 被调度时获取一个空闲线程。所以一个线程可能在一段时间内为多个dispatch queue工作。

但有一个想法是肯定的:当你将一个 block 分派(dispatch)到一个队列时,运行这个 block 的线程为一个确定的分派(dispatch)队列工作,你可以使用dispatch_get_current_queue得到它。 .

2。如果我向 globalQueue 异步分派(dispatch)一个 block ,它是否有机会在主线程上运行?

我认为它不会在主线程上运行任何 block 到 globalQueue,因为它无法评估 block 的执行时间,如果它是一个长时间的作业,它会阻塞主线程。

3.什么样的情况会导致dispatch_sync死锁?

我引用了 Concurrency programming guide 中的段落

You should never call the dispatch_sync or dispatch_sync_f function from a task that is executing in the same queue that you are planning to pass to the function. This is particularly important for serial queues, which are guaranteed to deadlock, but should also be avoided for concurrent queues.

关于ios - GCD中线程和队列是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24753655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com