Contensión de subprocesos de Ruby: No es una guerra campal

2025-02-03

Durante mucho tiempo, malinterpreté la "contención de subprocesos" en Ruby. No es una lucha caótica; en cambio, los subprocesos de Ruby hacen cola ordenadamente para el Global VM Lock (GVL). Cada subproceso obtiene el GVL, ejecuta el código y luego lo libera o es preemptado después de un cierto tiempo (el quantum del subproceso, que por defecto es de 100 ms). Esto sucede cuando un subproceso realiza E/S o se ejecuta durante más tiempo que su quantum. Comprender esto es crucial para optimizar las aplicaciones multiproceso, especialmente para evitar que los subprocesos vinculados a la CPU bloqueen los subprocesos vinculados a E/S, lo que provoca un aumento de la latencia de cola. Disminuir la prioridad de los subprocesos vinculados a la CPU o reducir el quantum del subproceso puede ayudar, pero el intervalo mínimo es de 10 ms.

Desarrollo