Ruby · Avançado · Inglês · Técnico
GVL
Global VM Lock, a trava que deixa só uma thread por vez executar código Ruby dentro de um processo do CRuby. Também é chamado de GIL.
Onde usar
Explica por que threads não aceleram trabalho de CPU em Ruby, mas ajudam em I/O, pois a trava é liberada na espera. Para usar vários núcleos, use processos, como o Puma em modo cluster, ou Ractors.
Em código
f = ->(n) { n < 2 ? n : f[n-1] + f[n-2] }
t = Time.now
ts = 4.times.map { Thread.new { f[25] } }
ts.each(&:join)
puts Time.now - t
# ~ o mesmo tempo de rodar em sequênciaExemplos
The GVL is why CPU-bound threads don't run in parallel.
O GVL é o motivo de threads que usam CPU não rodarem em paralelo.
Threads release the GVL while waiting on I/O.
As threads liberam o GVL enquanto esperam I/O.
Cuidado
Não significa que seu código é thread-safe: a trava protege a VM, mas race conditions, como incrementar um contador compartilhado, ainda acontecem.
Sinônimos
GIL, Global VM Lock