Есть ли хорошая документация по , сколько потоков создано GCD? В WWDC нам сказали, что он построен на основе ядер ЦП. Однако, если я назову этот пример:
for (int i=1; i<30000; i++) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSThread sleepForTimeInterval:100000];
});
}
он открывает 66 потоков даже на iPad1. (Он также открывает 66 потоков при исходном вызове в Lion). Почему 66?
В документации не упоминается количество созданных потоков. Главным образом потому, что оптимальное количество потоков сильно зависит от контекста.
Одна из проблем Grand Cendral Dispatch заключается в том, что он создаст новый поток, если запущенное задание блокируется. То есть вы должны избегать блокировок при использовании GCD, так как наличие большего количества потоков, чем ядер, является неоптимальным.
В вашем случае GCD обнаруживает, что задача неактивна, и создает новый поток для следующей задачи.
Почему 66 это предел за пределами меня.