swift - DispatchQueue 是使用 RunLoop 吗?

标签 swift grand-central-dispatch nsoperationqueue dispatch-queue runloop

每个Thread都有自己的RunLoopDispatchQueue如何与它们交互? DispatchQueue 是使用 RunLoop 将任务分派(dispatch)到 Thread 还是通过其他方式执行?

最佳答案

任何线程都可以有运行循环,但是现在,实际上只有主线程有。

当你手动创建线程时,它不会有运行循环。当您调用 RunLoop.current 时,顾名思义,它正在获取线程的运行循环,这表明它始终会有一个。但实际上,当您调用current时,如果已经存在,它将返回运行循环,如果不存在,它会为您创建一个RunLoop。如the docs说:

If a run loop does not yet exist for the thread, one is created and returned.

如果您确实创建了一个运行循环,则必须自己旋转它(如 here 所示;并且该示例过于简化)。但我们不再经常这样做了。 GCD 已使其在很大程度上变得过时。

在较高级别上,GCD 有多个工作线程池,每个池对应一个服务质量 (QoS)。当您通过 GCD 将某些内容分派(dispatch)到任何队列(除了针对 main 队列)时,它会获取适当 QoS 的可用工作线程,执行任务,完成后将工作线程标记为可用以备将来派发的任务。这些工作线程不需要(或不需要)运行循环。

关于swift - DispatchQueue 是使用 RunLoop 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70782419/

相关文章:

swift - 将 CAShapeLayer 添加到 subview

multithreading - NSOperation 会产生一个新线程吗?

swift - 不同格式的swift时间转换

json - 在swift 3中解析成数组

ios - 如何正确使用dispatch_sync?

iphone - GCD 串行队列是否使用所有 CPU 内核?

ios - Dispatch Semaphore 会无意中死锁吗?

objective-c - 从在后台线程上执行的其他方法内部在主线程上执行方法?

cocoa - 调试 NSOperationQueue 阻塞

Swift NSTimer 动态改变间隔