2

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

我确定我误解了一些东西。有人可以告诉我发生了什么吗?

4

1 回答 1

5

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

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

于 2011-01-27T21:34:49.337 回答