En informática , el problema del rebaño atronador ocurre cuando una gran cantidad de procesos o subprocesos que esperan un evento se despiertan cuando ese evento ocurre, pero solo un proceso es capaz de manejar el evento. Cuando los procesos se despierten, cada uno 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 serializa las respuestas a las solicitudes de un único descriptor de archivo, por lo que solo se activa un subproceso o proceso. [2] Para epoll() en la versión 4.5 del kernel de Linux, se agregó el indicador EPOLLEXCLUSIVE. Por lo tanto, varios conjuntos de epoll (diferentes subprocesos o diferentes procesos) pueden esperar en el mismo recurso y sólo se despertará un conjunto. Para determinadas cargas de trabajo, este indicador puede ofrecer 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 del rebaño atronador, ya que se pueden configurar de manera que solo uno de los subprocesos que esperan en el puerto de finalización se active cuando ocurre un evento. [4]
En sistemas que dependen de un mecanismo de retroceso (por ejemplo, retroceso exponencial ), los clientes reintentarán las llamadas fallidas esperando una cantidad de tiempo específica entre reintentos consecutivos. Para evitar el problema de la manada atronadora, se puede introducir jitter intencionalmente para romper la sincronización entre los clientes, evitando así colisiones. En este enfoque, se agrega aleatoriedad a los intervalos de espera entre reintentos, de modo que los clientes ya no estén sincronizados.