• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 队列优先级似乎不对

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:41:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

所以我正在测试一些线程代码

private func queuesWithQos(){
    let queue1 = DispatchQueue(label: "com.appcoda.queue1", qos: .userInitiated)
    let queue2 = DispatchQueue(label: "com.appcoda.queue2", qos: .utility)

    queue1.async {
        print("Queue1 thread: \(Thread.current)")
        for i in 0..<10{
            print("Queue1:", i)
        }
    }

    queue2.async {
        print("Queue2 thread: \(Thread.current)")
        for i in 100..<110{
            print("Queue2", i)
        }
    }

    DispatchQueue.main.async {
        print("I am in main queue")
    }
}

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

我不明白?

谁能给我解释一下?

谢谢!



Best Answer-推荐答案


问题不在于队列中的少量工作。在您的情况下,即使您将打印数量增加到任何数量,也可能永远不会首先调用 I am in main queue

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

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

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

如果您想首先执行“我在主队列中”,只需将其从调度队列中删除即可。这就像说“立即执行”。

关于ios - 队列优先级似乎不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52773743/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap