Громовая проблема стада
В информатике проблема громового стада возникает, когда большое количество процессов или потоков, ожидающих события, просыпаются, когда это событие происходит, но только один процесс способен обработать это событие. Когда процессы просыпаются, каждый из них пытается обработать событие, но победит только один. Все процессы будут конкурировать за ресурсы, возможно, компьютер зависнет, пока стадо снова не успокоится. [ 1 ]
смягчение последствий
[ редактировать ]Ядро Linux сериализует ответы на запросы к одному файловому дескриптору, поэтому пробуждается только один поток или процесс. [ 2 ] Для epoll() в версии ядра Linux 4.5 был добавлен флаг EPOLLEXCLUSIVE. Таким образом, несколько наборов epoll (разные потоки или разные процессы) могут ожидать на одном и том же ресурсе, и только один набор будет пробужден. Для определенных рабочих нагрузок этот флаг может значительно сократить время обработки. [ 3 ]
Аналогично в Microsoft Windows порты завершения ввода-вывода могут смягчить проблему громоподобного стада, поскольку их можно настроить так, что при возникновении события пробуждается только один из потоков, ожидающих порт завершения. [ 4 ]
В системах, которые полагаются на механизм отсрочки (например, экспоненциальную отсрочку ), клиенты будут повторять неудачные вызовы, ожидая определенное количество времени между последовательными попытками. Чтобы избежать проблемы громоподобного стада, можно целенаправленно ввести джиттер , чтобы нарушить синхронизацию между клиентами и тем самым избежать коллизий. При таком подходе к интервалам ожидания между повторными попытками добавляется случайность, поэтому клиенты больше не синхронизируются.
См. также
[ редактировать ]- Управление процессами (вычисления)
- Блокировка конвоя
- Проблема со спящим парикмахером
- Глобальная синхронизация TCP
- Давка с кэшем
Ссылки
[ редактировать ]- ^ «Проблема громового стада» . Файл жаргона (версия 4.4.7) . Проверено 9 июля 2019 г.
- ^ «Существует ли больше проблема громового стада в Linux» . stackoverflow.com . Проверено 9 июля 2019 г.
- ^ Мадарс, Витолинш (05 декабря 2015 г.). «EPOLLEXCLUSIVE Тестирование исправлений ядра Linux» . мвитолин . Проверено 11 августа 2020 г.
- ^ «Порты завершения ввода-вывода — блог Мэтта Годболта» . xania.org . Проверено 23 января 2019 г.