Ruby: fundamentos de Threads
O curso trata de como as threads do Ruby se comportam depois de criadas. Mostra como ler o ciclo de vida de uma thread com Thread#status e alive?, e como report_on_exception e abort_on_exception lidam com uma thread que levanta exceção. Monta um deadlock com dois mutexes travados em ordem oposta e o exibe com segurança usando join com timeout. Usa Queue e SizedQueue para passar trabalho entre threads com backpressure. Por fim, mede o GVL com Benchmark.realtime: threads ganham muito em trabalho preso em I/O e quase nada em trabalho preso em CPU.
O que você vai aprender
- ✓Ler o ciclo de vida de uma thread com Thread#status e alive?
- ✓Tratar exceções em threads com report_on_exception e abort_on_exception
- ✓Reproduzir um deadlock e evitá-lo com ordem consistente de locks
- ✓Passar trabalho entre threads com Queue e SizedQueue
- ✓Medir o GVL com Benchmark.realtime em trabalho preso em I/O e em CPU
Thread#status e o ciclo de vida de uma thread
A aula "Threads e concorrência", do curso do nível intern Fundamentos de OS, cobriu processo contra thread e concorrência contra paralelismo. Também cobriu o GVL e por que ele é liberado durante I/O, Thread.new/.join, uma demo de condição de corrida corrigida com Mutex#synchronize e o modelo do…
Ler a aula completa grátis →Currículo
7 aulasThread#status e o ciclo de vida de uma thread
Como ler Thread#status e alive? para distinguir uma thread rodando de uma encerrada, e um fim normal de uma quebra.
abort_on_exception e report_on_exception
Como report_on_exception registra a exceção não tratada de uma thread e abort_on_exception a levanta de novo na principal.
Um deadlock real: dois mutexes, ordem oposta
Dois mutexes travados em ordem oposta geram deadlock, mostrado com join e timeout e evitado com ordem fixa.
Queue e SizedQueue: entregas thread-safe
Queue e SizedQueue para passar trabalho entre threads produtoras e consumidoras, com pop bloqueante e backpressure.
Medindo a liberação do GVL com benchmark
Benchmark.realtime compara chamadas sleep em sequência e em threads e mostra o GVL liberado durante I/O, com ganho de 7,88x.
Trabalho ligado a CPU prova o limite do GVL
O mesmo benchmark com aritmética pura quase não mostra ganho, porque threads presas em CPU se revezam no GVL.
Juntando tudo
Uma revisão de status de thread, configurações de exceção, deadlocks, filas e das duas medições do GVL.