En informática, la concurrencia es la ejecución de varias secuencias de instrucciones al mismo tiempo. En un sistema operativo, esto sucede cuando hay varios subprocesos de proceso que se ejecutan en paralelo. Estos hilos pueden comunicarse entre sí a través de la memoria compartida o el paso de mensajes.
La distribución es una forma de concurrencia en la que toda la comunicación entre subprocesos simultáneos se realiza exclusivamente mediante el paso de mensajes. La distribución es útil porque emplea una escala más indulgente del consumo de recursos, lo que economiza estos recursos. Mientras que la concurrencia de memoria compartida a menudo requiere un solo procesador por subproceso, la distribución permite que varios subprocesos coexistan y se comuniquen entre sí.
La concurrencia es también una filosofía de diseño de programación. En la programación concurrente, los programadores intentan desglosar un problema complejo en varios procesos de ejecución simultánea que pueden abordarse individualmente. Aunque la programación concurrente ofrece una mejor estructura de programa que la programación secuencial, no siempre es más práctica. En un sistema concurrente, los cálculos que se ejecutan al mismo tiempo pueden divergir, dando respuestas indeterminadas. El sistema puede terminar en un punto muerto si no se asignan máximos bien definidos para el consumo de recursos de cada uno de los subprocesos en ejecución. Por lo tanto, para diseñar una concurrencia robusta en un sistema operativo, un programador debe reducir un problema a tareas individuales, paralelas y coordinar la ejecución, asignación de memoria e intercambio de datos de esas tareas.