每个Thread都有自己的RunLoop,DispatchQueue是如何与它们交互的?DispatchQueue是使用RunLoop将任务分派给Thread,还是以另一种方式执行任务?
发布于 2022-01-20 18:57:58
任何线程都可以有一个run循环,但是,在现实中,只有主线程才有。
当您手动创建线程时,它将不具有run循环。当您调用RunLoop.current时,名称表示它正在抓取线程的运行循环,这意味着它总是有一个循环。但实际上,当您调用current时,如果其中一个已经存在,它将返回run循环,如果没有,它将为您创建一个RunLoop。正如医生们所说:
如果线程还不存在run循环,则创建并返回一个循环。
如果您确实创建了一个run循环,那么您必须自己在其上旋转(如这里所示;该示例过于简化)。但我们不再经常这么做了。全球气候变化已使其基本上过时。
在较高级别上,GCD有工作线程池,每个服务质量池(QoS)一个。当您通过GCD向任何队列(不针对main队列)发送某个内容时,它会捕获适当QoS的可用工作线程,执行任务,并在完成后将该工作线程标记为可用于未来分派的任务。这些工作线程不需要(或不需要)运行循环。
https://stackoverflow.com/questions/70782419
复制相似问题