Сколько потоков следует создать в Grand Central Dispatch? - PullRequest
2 голосов
/ 28 января 2011

Я понимаю, что GCD будет создавать столько потоков, сколько необходимо для наилучшего использования процессора. В коде, использующем dispatch_async для запуска около 30 фоновых задач, я вижу, что число потоков в мониторе активности увеличивается примерно на 30 Я бы этого не ожидал, так как это всего лишь двухъядерный ПК.

Я уверен, что что-то неправильно понимаю. Может кто-нибудь сказать мне, что происходит?

1 Ответ

5 голосов
/ 28 января 2011

Одной из ситуаций, когда GCD увеличит пул потоков за счет добавления большего количества потоков, является конфликт ввода-вывода.Если отправленный блок ожидает файловой системы или сетевого ввода-вывода, он не использует ЦП, поэтому GCD считает, что ЦП не используется и способен обрабатывать больше потоков.

Фактически, в зависимости от характераотправленные блоки, это может еще больше увеличить конфликты ввода-вывода и достичь предела 512 рабочих потоков.Майк Эш написал сообщение в блоге об этой ситуации.

...