Ruby: concorrência
O curso compara os modelos de concorrência do Ruby: threads, Fibers, processos e Ractors. Ele separa o trabalho que espera do trabalho que calcula e explica por que as threads do CRuby sobrepõem I/O, enquanto o trabalho preso em CPU pede processos ou Ractors. Ele cobre fork e copy-on-write, as regras de compartilhamento dos Ractors, a API do Ruby 4.0.1 e o erro de isolamento que o Active Record levanta num Ractor. A segurança entre threads aparece como decisão de design, com Mutex, Queue e estado por requisição. A última lição aplica um critério de decisão a três cargas num processo Rails.
O que você vai aprender
- ✓Como threads, Fibers, processos e Ractors diferem em paralelismo e compartilhamento de objetos
- ✓Por que as threads do CRuby sobrepõem esperas de I/O e não trabalho de CPU
- ✓Como fork, copy-on-write e serialização definem o custo dos processos
- ✓As regras de compartilhamento dos Ractors, a API do Ruby 4.0.1 e seus limites atuais com o Rails
- ✓Projetar estado seguro entre threads com Mutex, Queue e ActiveSupport::CurrentAttributes
- ✓Escolher um modelo para cada carga e ler as configurações de threads e conexões do Puma
Três modelos, uma decisão
Um ticket cai no seu quadro: "a página de checkout chama quatro serviços e leva 1,8 segundo". Você já sabe que a correção é parar de chamá-los um depois do outro. O que você precisa decidir é qual modelo de concorrência do Ruby usar, e essa decisão tem três candidatos reais, e não um.
Ler a aula completa grátis →Currículo
7 aulasTrês modelos, uma decisão
Compara threads, processos, Ractors e Fibers por paralelismo e compartilhamento, e separa cargas que esperam de cargas que calculam.
Threads e Fibers: concorrência sem paralelismo
Mostra como threads sobrepõem esperas de I/O, por que compartilham tudo e onde entram Fibers e fiber schedulers.
Processos: paralelismo que você paga
Cobre fork, copy-on-write e custo de serialização, e como os workers do Puma e o Solid Queue usam processos aqui.
Ractors: as regras de compartilhamento são o design
Explica objetos compartilháveis, congelamento profundo com make_shareable, cópia na fronteira, isolamento de blocos e Ractor::Port no Ruby 4.0.1.
Ractors, com honestidade: o que funciona hoje
Analisa o aviso de recurso experimental, as mudanças de API desde o Ruby 3.0 e o IsolationError do Active Record num Ractor.
Projetando para thread safety
Projeta estado seguro com imutabilidade, Mutex, Queue e CurrentAttributes, e mostra os problemas de criar threads dentro de requisições.
Escolhendo, dentro de um processo Rails
Aplica três perguntas a um espalhamento HTTP, um relatório preso em CPU e uma fila de jobs, e examina as conexões do Puma.