【问题标题】:Main Queue Async vs. Default Queue Async ExplanationMain Queue Async vs. Default Queue Async 解释
【发布时间】:2019-05-22 04:54:40
【问题描述】:

我刚刚看了这个raywenderlich.com video 并拿走了有问题的代码的this screenshot (@ 22:30)。

我想知道mainQueue.async 是如何在defaultQueue.async 之后完成的,尽管被放在了我认为更高优先级的队列中(默认为userInteractiveuserInitiated,但无论如何高于default,对吧?) .我观看了整个视频,感觉在看到之前我对所有内容都有了很好的把握。有人能解释一下吗?提前非常感谢。

【问题讨论】:

    标签: ios xcode concurrency grand-central-dispatch


    【解决方案1】:

    屏幕截图中的代码不足以真正看到发生了什么,但我认为问题在于:

    主队列是特殊的;与所有其他调度队列不同,添加到主队列的块由应用程序的主运行循环调度。所有其他调度队列在任何可用线程上执行块。

    因此,虽然您排队在后台运行的块几乎会立即启动,但您排队在主线程上运行的任何内容都必须等到主运行循环循环,并且必须与计时器、用户输入事件、等等。

    【讨论】:

    • 感谢您的回复。那几行代码实际上几乎是影响这些打印行的所有内容:(我想我假设主线程会在代码甚至到达第二个代码之前将它放在后台线程(也具有更高的优先级)块被添加到默认队列中。
    • 根据经验,永远不要再猜测任务何时运行。变量太多了(CPU 内核的数量、系统的繁忙程度、其他排队的块、I/O 阻塞、调试器……)。如果知道或控制很重要,请使用信号量或调度组来强加命令。否则,有 zero 保证... :)
    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多