İçeriğe geç

GIL altında CPU-yoğun thread (ARCH6042)

Anahtar ruby.async.cpu-bound-thread-gil · Önem info · Kategori async

MRI Ruby gibi GIL kısıtlı çalışma zamanlarında thread’ler CPU işini paralelleştirmez; aynı anda yalnızca biri Ruby kodu çalıştırır. CPU-yoğun işi thread’e dağıtmak hızlandırma sağlamaz, yalnızca ek yük getirir. Bunun yerine süreçler veya Ractor’lar kullanın.

threads = chunks.map do |chunk|
Thread.new { chunk.map { |n| fibonacci(n) } }
end
results = threads.flat_map(&:value)
require "etc"
results = Parallel.map(chunks, in_processes: Etc.nprocessors) do |chunk|
chunk.map { |n| fibonacci(n) }
end

CPU-yoğun işi paralelleştirmek için thread yerine ayrı süreçler (örneğin Parallel.map in_processes:) veya Ractor’lar kullanın.