concorrencia101
  • Introdução
  • First things first
  • Agradecimentos
  • Parte I - Concorrência no sistema operacional
    • O que é o programa no sistema operacional
    • Escalonador preemptivo de tarefas
    • Uma nota sobre escalonamento cooperativo
    • Propriedades de um processo
    • Clone de processo (forking)
    • Clone leve de processo (thread)
    • Todo processo tem uma thread principal
    • Uma nota sobre paralelismo
    • Principais desafios em cenário de concorrência
      • Race condition
      • Sincronização com locks
      • Modelo de atores
    • E o I/O?
      • Latência de CPU vs Latência de I/O
      • Chamadas bloqueantes
      • Chamadas não-bloqueantes
      • Assincronismo e escalonamento cooperativo
    • Vamos colocar em prática...
  • PARTE II - Concorrência em diferentes linguagens
    • Definindo ambientes de execução
    • Concorrência em C
      • Forking de processos
      • Threads
      • Race condition e sincronização de threads com mutex
      • Desafios com o uso de threads
      • Thread Pool em C
      • Green threads
      • Modelo de Atores
      • Trabalhando com I/O
    • Concorrência em Ruby
      • Forking de processos
      • Threads
      • Race condition, YARV, GVL e paralelismo em Ruby
      • Modelo de Atores
      • Trabalhando com I/O
Powered by GitBook
On this page
  1. Parte I - Concorrência no sistema operacional

Uma nota sobre paralelismo

PreviousTodo processo tem uma thread principalNextPrincipais desafios em cenário de concorrência

Last updated 4 months ago

Eu não queria gastar muito texto pra falar de paralelismo, mesmo porque paralelismo é o ato de rodar coisas em paralelo. Nada mais do que isso. Mas pra isso, precisamos de hardware.

Ou precisamos de mais CPU, ou precisamos de mais núcleos de CPU. Simples assim.

Entretanto, há uma vantagem do paralelismo que ainda não mencionei mas que dá pra falar brevemente. Lembra do problema de escalabilidade que poderia ser resolvido com clone de processos? Pois bem, com um núcleo apenas, ainda assim só conseguimos executar uma thread por vez de forma concorrente.

Supondo que temos 400 operações pra executar, e nossa CPU sozinha consegue fazer 100 por segundo, teríamos então uma capacidade de terminar todas as operações em 4 segundos.

Esse é o nosso throughput, ou seja, a capacidade de realizar N tarefas num determinado intervalo de tempo.

100/ops por segundo

Porém com uma CPU dual-core, podemos executar 2 operações por vez de forma paralela, assim nosso throughput dobraria, para 200/ops por segundo.

Bom, é isso que queria falar sobre paralelismo. Não tem segredo. Quer aumentar o throughput do sistema? Coloca mais hardware.

Mas calma jovem...dá pra aumentar throughput também sem precisar ficar comprando mais hardware (que tá cada vez mais caro, né?). Por isso eu bato tanto na tecla para dissociarmos concorrência de paralelismo.

Voltando ao foco principal do guia: concorrência.