Muchos libros de programación y tutoriales de Linux/Unix hablan sobre el "Thundering Herd Problem" que ocurre cuando se bloquean varios hilos u horquillas en una llamada select() esperando la legibilidad de un socket de escucha. Cuando la conexión entra, todos los hilos y las horquillas se despiertan, pero solo uno "gana" con una llamada exitosa a "accept()". Mientras tanto, se desperdicia mucho tiempo de CPU despertando todos los hilos/tenedores sin ningún motivo.¿Ya existe el problema del rebaño Thundering en Linux?
Me di cuenta de un project que proporciona una "solución" para este problema en el kernel de Linux, pero este es un parche muy antiguo.
Creo que hay dos variantes; Uno donde cada tenedor selecciona() y luego acepta(), y uno que simplemente acepta().
¿Los kernels modernos de Unix/Linux aún tienen el problema Thundering Herd en estos casos o solo en la versión "select() then accept()"?
nunca oído hablar de esto, pero un montón de cosas el "núcleo de Linux hace mal", definitivamente no es cierto por más tiempo! –
Esa es una pregunta muy interesante. Sería realmente difícil manejarlo bien en el caso de 'seleccionar' y luego 'aceptar' porque no puede garantizar que el proceso que está haciendo 'seleccionar' eventualmente 'acepte'.Creo que alguien debería hacer una prueba para averiguarlo, y quizás probar 'epoll' también. – Omnifarious