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.
Hatalı
Bölüm başlığı “Hatalı”threads = chunks.map do |chunk| Thread.new { chunk.map { |n| fibonacci(n) } }endresults = threads.flat_map(&:value)require "etc"
results = Parallel.map(chunks, in_processes: Etc.nprocessors) do |chunk| chunk.map { |n| fibonacci(n) }endDüzeltme
Bölüm başlığı “Düzeltme”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.