ExpertiDict

Ruby · Avançado · Inglês · Técnico

GVL

/ˌdʒi ˌvi ˈɛl/sigla

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ência

Exemplos

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

Veja também

Todos os termos de Ruby