菜鸟教程小白 发表于 2022-12-11 20:41:20

ios - 队列优先级似乎不对


                                            <p><p>所以我正在测试一些线程代码</p>

<pre><code>private func queuesWithQos(){
    let queue1 = DispatchQueue(label: &#34;com.appcoda.queue1&#34;, qos: .userInitiated)
    let queue2 = DispatchQueue(label: &#34;com.appcoda.queue2&#34;, qos: .utility)

    queue1.async {
      print(&#34;Queue1 thread: \(Thread.current)&#34;)
      for i in 0..&lt;10{
            print(&#34;Queue1:&#34;, i)
      }
    }

    queue2.async {
      print(&#34;Queue2 thread: \(Thread.current)&#34;)
      for i in 100..&lt;110{
            print(&#34;Queue2&#34;, i)
      }
    }

    DispatchQueue.main.async {
      print(&#34;I am in main queue&#34;)
    }
}
</code></pre>

<p>而且,我认为在这种情况下应该首先打印“我在主队列中”,因为它是主线程并且具有最高优先级?但显然,它是最后打印的? </p>

<p>我不明白? </p>

<p>谁能给我解释一下? </p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题不在于队列中的少量工作。在您的情况下,即使您将打印数量增加到任何数量,也可能永远不会首先调用 <code>I am in main queue</code>。</p>

<p>如果您多次运行代码,您会看到 <code>I am in main queue</code> 显示在不同的状态,因为 <code>async</code> 命令将作业提交到队列,不管是主队列还是后台队列,现在都不会执行,会需要几毫秒,具体取决于要执行的队列的负载。</p>

<p>在您的情况下,“我在主队列中”作业只需几毫秒即可安排执行,但其他作业有足够的时间开始执行其作业(并可能完成它们)。这就是为什么您首先看到其他日志的原因,这是调度时间延迟。 </p>

<p>您还必须记住,主队列负责 UI 显示,因此如果正在渲染或其他阻塞操作,可能需要更多时间来执行您的作业。</p>

<p>如果您想首先执行“我在主队列中”,只需将其从调度队列中删除即可。这就像说“立即执行”。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 队列优先级似乎不对,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/52773743/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/52773743/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 队列优先级似乎不对