据我所知,GCD只会根据需要创建尽可能多的线程以充分利用CPU。在使用dispatch_async
启动大约30个后台任务的代码中,我看到活动监视器中的线程数大约增加了30个。我不会想到,因为它只是一个双核PC。
我确定我误解了一些事情。有人能告诉我发生了什么吗?
答案 0 :(得分:5)
GCD通过添加更多线程来增加线程池的一种情况是I / O争用。如果调度块等待文件系统或网络I / O,则它不使用CPU,因此GCD认为CPU处于空闲状态并且能够处理更多线程。
实际上,根据调度块的性质,这可能会进一步增加I / O争用并达到512个工作线程的限制。 Mike Ash写了一篇关于这种情况的blog post。