En informática , el problema de la manada estruendosa ocurre cuando una gran cantidad de procesos o subprocesos que esperan un evento se despiertan cuando ocurre ese evento, pero solo un proceso es capaz de manejar el evento. Cuando los procesos se despierten, cada uno de ellos intentará manejar el evento, pero solo uno ganará. Todos los procesos competirán por los recursos, posiblemente congelando la computadora, hasta que la manada se calme nuevamente. [1]
El kernel de Linux serializará las respuestas para las solicitudes a un descriptor de archivo único, por lo que solo se activa un hilo (proceso). [2] Para epoll () en la versión del kernel de Linux 4.5 se agregó el indicador EPOLLEXCLUSIVE, por lo que varios conjuntos de epoll (diferentes subprocesos o procesos) pueden esperar en el mismo recurso y solo se activará un conjunto. Para determinadas cargas de trabajo, esta marca puede dar lugar a una reducción significativa del tiempo de procesamiento. [3]
De manera similar, en Microsoft Windows, los puertos de finalización de E / S pueden mitigar el problema de la manada estruendosa, ya que se pueden configurar de modo que solo uno de los subprocesos que esperan en el puerto de finalización se despierte cuando ocurre un evento. [4]
En los sistemas que se basan en un mecanismo de retroceso (por ejemplo, retroceso exponencial ), los clientes volverán a intentar las llamadas fallidas, esperando una cantidad de tiempo específica entre reintentos consecutivos. Para evitar el problema de la manada atronadora, la fluctuación se puede introducir intencionalmente, para romper la sincronización entre los clientes evitando así colisiones. En este enfoque, la aleatoriedad se agrega a los intervalos de espera entre reintentos, de modo que los clientes ya no estén sincronizados.
5. [1]