Количество потоков, созданных GCD?

Есть ли хорошая документация по , сколько потоков создано 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?

26
задан steipete 12 September 2011 в 09:48
поделиться

1 ответ

В документации не упоминается количество созданных потоков. Главным образом потому, что оптимальное количество потоков сильно зависит от контекста.

Одна из проблем Grand Cendral Dispatch заключается в том, что он создаст новый поток, если запущенное задание блокируется. То есть вы должны избегать блокировок при использовании GCD, так как наличие большего количества потоков, чем ядер, является неоптимальным.

В вашем случае GCD обнаруживает, что задача неактивна, и создает новый поток для следующей задачи.

Почему 66 это предел за пределами меня.

2
ответ дан 28 November 2019 в 07:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: