MRI Ruby (CRuby) có GIL (còn gọi GVL — Global VM Lock): chỉ 1 thread được thực thi Ruby bytecode tại một thời điểm, ngay cả trên multi-core CPU.
Lý do tồn tại: đơn giản hoá garbage collector và C extension — không cần lock từng object.
Ảnh hưởng:
- CPU-bound work (tính toán nặng): nhiều thread không tăng hiệu năng → dùng Process.fork hoặc Ractors (Ruby 3.0+).
- I/O-bound work (HTTP call, DB, file): GIL tự động nhả khi thread chờ I/O → nhiều thread vẫn hữu ích.
ruby
threads = urls.map { |url| Thread.new { Net::HTTP.get(URI(url)) } }
threads.each(&:join)JRuby / TruffleRuby không có GIL → parallelism thật sự.