Во многих книгах и руководствах по программированию на linux / unix говорится о «проблеме громового стада» , которая возникает, когда несколько потоков или вилок блокируются при вызове select (), ожидающем читаемости прослушивающего сокета. Когда соединение приходит, все потоки и вилки просыпаются, но только один «выигрывает» при успешном вызове «accept ()». Между тем, много времени процессора тратится впустую, разбудив все нити / разветвления без причины.
Я заметил проект , который предоставляет "исправление" для этой проблемы в ядре Linux, но это очень старый патч.
Я думаю, что есть два варианта; Один, где каждая ветвь действительно выбирает (), а затем принимает (), и тот, который просто принимает ().
У современных ядер Unix / Linux все еще есть проблема Thundering Herd в обоих этих случаях или только версия "select () then accept ()"?