Why Concurrency Is Hard
Por qué la Concurrencia es Difícil
Concurrent code introduces a class of bugs that never appear in single-threaded execution. Shared mutable state is the root cause of most concurrency defects. A data race can go undetected for months — until load increases and threads interleave at exactly the wrong moment.
El código concurrente introduce una clase de errores que nunca aparecen en ejecución de un solo hilo. El estado mutable compartido es la causa raíz de la mayoría de los defectos de concurrencia. Una carrera de datos puede pasar desapercibida durante meses — hasta que la carga aumenta y los hilos se intercalan en el momento exactamente equivocado.
Keep It Simple
Mantenlo Simple
Separate concurrency-related code from other code. A concurrent module should do nothing but manage concurrency. Push business logic into synchronous functions that are easy to test and reason about in isolation.
Separa el código relacionado con la concurrencia del resto. Un módulo concurrente no debe hacer nada más que gestionar la concurrencia. Empuja la lógica de negocio a funciones síncronas que sean fáciles de probar y razonar en aislamiento.
✏️
Code Challenge
Desafío de Código
Spot the race condition, then see the fix.
Identifica la condición de carrera y luego ve la solución.
💡 Key takeaway
Limit the scope of shared data. Prefer immutable data. Treat threads as isolated units that communicate by message.
Limita el alcance de los datos compartidos. Prefiere datos inmutables. Trata los hilos como unidades aisladas que se comunican por mensaje.