Concorrência: Definição, Como Funciona e Conceitos Chave
Concorrência é a capacidade de diferentes partes de um programa executarem fora de ordem ou em paralelo, progredindo independentemente.
Concorrência em computação permite que um sistema lide com múltiplas tarefas ou processos de uma forma que parece simultânea. As tarefas podem ser executadas de forma intercalada, em vez de estritamente sequencial, permitindo que cada uma progrida independentemente. Isso leva a uma melhor capacidade de resposta do sistema e utilização de recursos. Técnicas como time-sharing, onde um processador alterna rapidamente entre tarefas, criam a ilusão de execução simultânea. Paralelismo real, que requer múltiplos processadores, executa tarefas genuinamente no mesmo instante. Concorrência é vital para sistemas operacionais, servidores e GUIs, gerenciando inúmeras operações sem bloqueio em todo o sistema.
graph LR
Center["Concorrência: Definição, Como Funciona e Conceitos Chave"]:::main
Pre_thread["thread"]:::pre --> Center
click Pre_thread "/terms/thread"
Pre_process["process"]:::pre --> Center
click Pre_process "/terms/process"
Rel_parallelism["parallelism"]:::related -.-> Center
click Rel_parallelism "/terms/parallelism"
Rel_identity_and_access_management_iam["identity-and-access-management-iam"]:::related -.-> Center
click Rel_identity_and_access_management_iam "/terms/identity-and-access-management-iam"
Rel_pipelining["pipelining"]:::related -.-> Center
click Rel_pipelining "/terms/pipelining"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 Explique como se eu tivesse 5 anos
Pense em um chef fazendo malabarismos com vários pedidos. Ele pica vegetais para um prato enquanto a sopa cozinha lentamente para outro, e depois assa pão para um terceiro. O chef não está fazendo tudo exatamente no mesmo segundo (isso é paralelismo), mas alterna eficientemente entre as tarefas para que todas as refeições sejam preparadas sem que um pedido interrompa todo o resto. Isso mantém a cozinha funcionando sem problemas e entrega a comida mais rapidamente.
🤓 Expert Deep Dive
Concorrência é um princípio de design que permite que múltiplos cálculos se sobreponham no tempo, gerenciado através de:
Agendamento de Tarefas: Agendadores do SO alocam tempo de CPU para processos/threads, criando uma ilusão de execução simultânea.
Programação Assíncrona: Operações progridem independentemente do fluxo principal, usando padrões como callbacks ou async/await para gerenciar resultados sem bloquear.
Multithreading: Múltiplas threads dentro de um processo executam concorrentemente, compartilhando memória. Primitivas de sincronização (mutexes, semáforos) previnem condições de corrida e garantem a integridade dos dados.
Passagem de Mensagens: Em sistemas distribuídos/modelos de atores, a concorrência é gerenciada via troca de mensagens entre processos ou atores desacoplados.
Os principais desafios incluem o gerenciamento de recursos compartilhados, a prevenção de deadlocks/livelocks e a garantia de atomicidade. Concorrência (lidar com várias coisas ao mesmo tempo) difere de paralelismo (fazer várias coisas ao mesmo tempo); concorrência pode existir sem paralelismo.