DEV Community

Filipe Roberto Beck
Filipe Roberto Beck

Posted on

Assincronismo, concorrência e paralelismo

Antes de prosseguirmos, vamos esclarecer o que é uma thread: Segundo o Wikipedia, thread é um "fio de execução, também conhecida como linha ou encadeamento de execução". É um fluxo de execução independente que roda de forma assíncrona em relação à outras threads, intercalando as execuções entre elas quando houver um único núcleo, ou executando cada uma em um núcleo separado quando houver mais de um (ou uma combinação dos dois - o que é mais frequente, pois o número de threads geralmente excede o número de núcleos). Em resumo, conceitualmente um grupo de threads em execução rodam de forma independente e ao mesmo tempo.

Algo que pode gerar confusão é que assincronismo, concorrência e paralelismo não são necessariamente exclusivos. Uma atividade paralela também é concorrente, o que por sua vez também é assíncrona. Um é subgrupo do outro, conforme mostra a imagem acima. Vamos esclarecer um a um, do mais geral ao mais específico.

Assincronismo: É qualquer atividade onde a ordem das operações não pode ser determinada. Pode ser duas threads em execução, mas também pode ser uma única thread consumindo eventos de uma fila como, por exemplo, uma aplicação de interface gráfica. Nesse caso, a ordem dos eventos depende do usuário e o programa age de forma diferente dependendo se o próximo evento é uma tecla digitada, um movimento do mouse ou uma ação de fechar.

Alt Text

Concorrência: Refere-se à várias threads em execução simultânea, podendo estarem rodando em núcleos distintos ou intercalando as execuções em um único núcleo. Dois processos executando em um sistema operacional são dois fios de execução concorrendo por clocks da CPU.

Alt Text

Paralelismo: Refere-se à várias threads executando em núcleos distintos. Dois processos executando em uma CPU dual-core, cada uma em um núcleo, são dois fios de execução executando de forma paralela.

Alt Text

Top comments (0)