Обойти ли ограничение потоков в Grand Central Dispatch?

С участиемGrand Central Dispatchможно легко выполнить трудоемкую задачу в неосновном потоке, избежать блокировки основной части и поддерживать отзывчивость интерфейса пользователя. Просто с помощьюdispatch_async и выполнить задачу в глобальной параллельной очереди.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // code
});

Однако что-то звучит слишком хорошо, чтобы быть правдой, так как у этого обычно есть свои недостатки. После того, как мы часто используем это в нашем проекте приложения для iOS, недавно мы обнаружили, что для него существует ограничение в 64 потока. Как только мы достигнем предела, приложение будет зависать / зависать. Приостановив приложение с Xcode, мы видим, что основной поток поддерживаетсяsemaphore_wait_trap.

Поиск в Интернете подтверждает, что другие тоже сталкиваются с этой проблемой, но пока что не найдено решение этой проблемы.

Достигнут жесткий предел потока отправки: 64 (слишком много потоков отправки заблокировано в синхронных операциях)

Еще один вопрос о переполнении стека подтверждает, что эта проблема возникает при использованииdispatch_sync а такжеdispatch_barrier_async слишком.

Вопрос:
Поскольку Grand Central Dispatch имеет ограничение в 64 потока, есть ли обходной путь для этого?

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос