gpt4 book ai didi

iOS GCD : main thread dequeue blocks from queues other than main queue?

转载 作者:行者123 更新时间:2023-12-01 18:26:52 25 4
gpt4 key购买 nike

我知道队列不是线程。队列是比 GCD 中的线程更高层次的概念。程序员只处理队列,让系统决定哪些线程执行 block 以获得最大效率。

而且我知道主队列绑定(bind)到主线程,这意味着如果我在主队列上放置一个 block ,只有主线程会出列并运行它。我的问题是:除了主队列之外,主线程是否有可能从队列(串行或并发)中出列 block ?

最佳答案

问题:“主线程是否有可能从队列(串行或并发)除主队列之外的队列中取出阻塞?”

回答:“没有。”

如果 GCD 允许提交到全局并发队列的 block 在主线程上运行,那么这些 block 也可能执行阻塞 UI 的长时间运行的操作,这既不好,也违背了 GCD 自己的设计原则。它也不是如何工作的文档(如果你想知道 确切地 GCD 是如何工作的,源代码总是一个很好的引用,因为 GCD 也是开源的)。唯一可能在当前线程上执行 block 作为优化的时间是在 dispatch_sync() 情况下,因为很明显程序员不打算在该 block 之前返回当前线程,并且在它之前的任何排队 block , 在任何情况下都完成并且阻塞当前线程是 预计 行为,所以这并不奇怪。 dispatch_async() 显然不是这样,因为该 API 显然需要异步行为。

最后,为了澄清该答案中的另一个混淆点,dispatch_queue_create() 不仅创建串行队列 - 它还可以用于创建并发队列,因此并发队列执行不是全局并发队列的唯一提供!请参阅第二个参数 - 它可以设置为 DISPATCH_QUEUE_CONCURRENT创建一个并发队列(手册页有点过时,但 /usr/include/dispatch/queue.h 中的 HeaderDoc 是权威的)。

关于iOS GCD : main thread dequeue blocks from queues other than main queue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12851466/

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