Остановка одновременной очереди отправки GCD с «Достигнут мягкий предел потока рассылки: 64» в журнале аварий
Моя программа - это сервер, который обрабатывает входящие запросы. Каждый действительный запрос упакован вNSOperation
и перешел в нормальное русло.NSOperationQueue
каждыйNSOpearation
обрабатывает свой запрос. В некоторых случаях наNSDictionary
который я используюdispatch_queue
(параллельная очередь),dispatch_barrier_async
(когда установлено значение) иdispatch_sync
(когда получить значение), чтобы сделать этоNSDictionary
потокобезопасный.
Я тестирую свою программу с 100 запросами одновременно, тогда процесс иногда останавливается. Я убиваю процесс сSIGSEGV
чтобы увидеть журнал сбоев.
Большинство тем застряло вdispatch_sync
этой очереди. И есть примечание ниже
Достигнуто мягкое ограничение потока отправки: 64 (слишком много потоков отправки заблокировано в синхронных операциях)
Что на самом деле означает эта заметка? Каково его поведение? Я не могу найти информацию об этом пределе. Как я могу исправить эту проблему?
Я могу придумать 2 возможных способа избежать этой проблемы. (который ясобираюсь их протестировать и позже обновлю)
использованиеdispatch_semaphore
ограничить отправку блока в эту параллельную очередь.пределmaxConcurrentOperationCount
изNSOperationQueue
У вас есть лучшее решение?