Сколько потоков следует создать в Grand Central Dispatch?

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам