DispatchQueue是否使用RunLoop



每个Thread都有自己的RunLoopDispatchQueue如何与它们交互?DispatchQueue是使用RunLoop将任务分派给Thread,还是使用其他方式?

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

手动创建线程时,它将不会有运行循环。当您调用RunLoop.current时,名称表明它正在获取线程的运行循环,表明它总是有一个。但实际上,当您调用current时,如果已经存在运行循环,它将返回运行循环,如果没有,它将为您创建一个RunLoop。正如文件所说:

如果线程还不存在运行循环,则会创建并返回一个运行循环。

如果你确实创建了一个运行循环,你必须自己旋转它(如这里所示;这个例子被过度简化了(。但我们不再经常这样做了。GCD使它在很大程度上过时了。

在高级别上,GCD具有工作线程池,每个服务质量(QoS(一个池。当您通过GCD向任何队列(而不是以main队列为目标(调度某个东西时,它会获取一个具有适当QoS的可用工作线程,执行任务,并在完成后将该工作线程标记为可用于未来调度的任务。这些工作线程不需要(或不需要(运行循环。

相关内容

  • 没有找到相关文章

最新更新