Grand Central Dispatch应创建多少个主题?

时间:2011-01-27 21:22:54

标签: macos multicore grand-central-dispatch libdispatch

据我所知,GCD只会根据需要创建尽可能多的线程以充分利用CPU。在使用dispatch_async启动大约30个后台任务的代码中,我看到活动监视器中的线程数大约增加了30个。我不会想到,因为它只是一个双核PC。

我确定我误解了一些事情。有人能告诉我发生了什么吗?

1 个答案:

答案 0 :(得分:5)

GCD通过添加更多线程来增加线程池的一种情况是I / O争用。如果调度块等待文件系统或网络I / O,则它不使用CPU,因此GCD认为CPU处于空闲状态并且能够处理更多线程。

实际上,根据调度块的性质,这可能会进一步增加I / O争用并达到512个工作线程的限制。 Mike Ash写了一篇关于这种情况的blog post