Na ciência da computação, simultaneidade é a execução de várias sequências de instruções ao mesmo tempo. Em um sistema operacional, isso acontece quando há vários threads de processo em execução em paralelo. Esses threads podem se comunicar entre si por meio de memória compartilhada ou troca de mensagens.
Distribuição é uma forma de concorrência onde toda a comunicação entre threads simultâneas é feita exclusivamente por meio de troca de mensagens. A distribuição é útil porque emprega uma escala mais branda de consumo de recursos, o que economiza esses recursos. Enquanto a simultaneidade de memória compartilhada geralmente requer um único processador por thread, a distribuição permite que vários threads coexistam e se comuniquem entre si.
A simultaneidade também é uma filosofia de design de programação. Na programação simultânea, os programadores tentam dividir um problema complexo em vários processos de execução simultânea que podem ser tratados individualmente. Embora a programação simultânea ofereça uma estrutura de programa melhor do que a programação sequencial, nem sempre é mais prática. Em um sistema concorrente, os cálculos executados ao mesmo tempo podem divergir, fornecendo respostas indeterminadas. O sistema pode terminar em um impasse se máximos bem definidos não forem atribuídos para o consumo de recursos de cada um dos threads em execução. Assim, para projetar para uma simultaneidade robusta em um sistema operacional, um programador precisa reduzir um problema em tarefas paralelas individuais e coordenar a execução, alocação de memória e troca de dados dessas tarefas.