Nell'ambito dell'informatica, la concorrenza è l'esecuzione simultanea di più sequenze di istruzioni. In un sistema operativo, ciò accade quando vi sono più thread di processo in esecuzione in parallelo. Questi thread possono comunicare tra loro attraverso la memoria condivisa o il passaggio di messaggi.
La distribuzione è una forma di concorrenza in cui tutte le comunicazioni tra thread simultanei avvengono esclusivamente tramite il passaggio di messaggi. La distribuzione è utile perché impiega un ridimensionamento più moderato del consumo di risorse, che economizza queste risorse. Mentre la concorrenza della memoria condivisa spesso richiede un singolo processore per thread, la distribuzione consente a più thread di coesistere e comunicare tra loro.
La concorrenza è anche una filosofia di programmazione. Nella programmazione concorrente, i programmatori tentano di suddividere un problema complesso in diversi processi di esecuzione simultanei che possono essere risolti individualmente. Sebbene la programmazione concorrente offra una struttura del programma migliore rispetto alla programmazione sequenziale, non è sempre più pratica. In un sistema concorrente, i calcoli eseguiti nello stesso momento possono divergere, dando risposte indeterminate. Il sistema può terminare in un deadlock se i massimi ben definiti non vengono assegnati per il consumo di risorse di ciascuno dei thread in esecuzione. Pertanto, per progettare una concorrenza solida in un sistema operativo, un programmatore deve sia ridurre un problema in compiti paralleli, sia coordinare l'esecuzione, l'allocazione della memoria e lo scambio di dati di tali compiti.