开发者

How many threads should Grand Central Dispatch be creating?

I understand that GCD will only create as many threads as needed to make best use of the CPU. In code using dispatch_async to launch about 30 background task开发者_如何学JAVAs, I'm seeing the number of threads jump by about 30 in Activity Monitor. I would not have expected that, since it's only a dual core PC.

I'm sure I'm misunderstanding something. Can someone tell me what is going on?


One situation where GCD will increase the thread pool by adding more threads is I/O contention. If a dispatched block waits for filesystem or networking I/O, it doesn’t use the CPU, hence GCD thinks the CPU is idle and able to process more threads.

In fact, depending on the nature of the dispatched blocks, this can increase I/O contention further and reach the limit of 512 worker threads. Mike Ash has written a blog post about this situation.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜