Skip to content

Instantly share code, notes, and snippets.

@ruda
Last active October 9, 2016 12:22
Show Gist options
  • Save ruda/9052c50f30ed0a150ae8cab689cf5b91 to your computer and use it in GitHub Desktop.
Save ruda/9052c50f30ed0a150ae8cab689cf5b91 to your computer and use it in GitHub Desktop.
O que é concorrência em computação?

O que é concorrência em computação? Olhando a entrada de concurrency na Wikipedia em Inglês:

In computer science, concurrency is the decomposability property of a program, algorithm, or problem into order-independent or partially-ordered components or units. This means that even if the concurrent units of the program, algorithm, or problem are executed out-of-order or in partial order, the final outcome will remain the same.

Aqui duas idéias são importantes, (1) order-independent (ordem independente) e (2) partially-ordered components (parcialmente ordenados). Explicando, digamos que um sistema possua uma ação A e uma ação B. Se A não causa B e B não causa A, então temos uma ordem independente (1). Se A causa B então aqui temos uma ordem parcial (2).

Um programa que possui a propriedade (1) permite uma execução em qualquer ordem da ação (primeiro A, depois B; primeiro B, depois A) já a propriedade (2) permite que ordens distintas (A causa B e X causa Y) possam ser executadas (sequencialmente) como A, B, X, Y ou X, Y, A, B ou A, X, B, Y ou X, A, B, Y. No final do processamento dessas ações, o resultado tem que ser o mesmo para qualquer variante.

This allows for parallel execution of the concurrent units, which can significantly improve overall speed of the execution in multi-processor and multi-core systems.

Se eu tenho mais de uma unidade de processamento, então posso explorar a concorrência para utilizar os recursos paralelos que disponho. Nos exemplos anteriores, em (1) eu posso executar paralelamente A, B e em (2) eu posso executar paralelamente A, X e depois B e Y. Mas executar simultaneamente A, Y antes de X violaria a ordem parcial.

Quero dizer como ações A, B algo do tipo: escrever um valor num local de memória (ação A) e ler do mesmo local de memória (ação B).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment