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

Nic*_*ore 2 macos multicore libdispatch grand-central-dispatch

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

我确定我误会了什么.有人能告诉我发生了什么事吗?

小智 5

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

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