【发布时间】:2019-06-20 00:06:29
【问题描述】:
到目前为止,我找不到有关此功能的任何提及。 AFAIK,根据定义,任何 GCD 队列都可以在主线程中运行。如果一个任务繁重的 GCDQ 选择了主线程来执行,它会对 UI 产生一些不好的影响。 (我说的是DispatchQueue.async案例)
如果当前线程被检测为主线程,则此情况的典型解决方法是跳过任务。但这会浪费系统资源并引入不必要的复杂性。我相信必须有一种声明方式来做到这一点。
有没有更好的方法?我有各种不应该在主线程上运行的任务。我尝试生成一个单独的线程,但效果不佳,因为 macOS 缺少未命名的信号量。尽管DispatchSemaphore 是使用未命名的信号量实现的,但我不确定将DispatchSemaphore 与pthread 一起使用是否安全,因为它是GCD 级别的对象。
【问题讨论】:
标签: swift macos cocoa grand-central-dispatch qos