Concurență și Multithreading în Ruby: Thread, Mutex și Queue în Ruby

Ghid complet pentru concurență în Ruby: crearea firelor de execuție cu Thread.new, sincronizarea resurselor partajate cu Mutex, cozi sigure Thread::Queue și explicarea GVL/GIL.

Sintaxă
Thread.new { ... }; m = Mutex.new; m.synchronize { ... }

Ruby oferă suport nativ pentru fire de execuție de nivel de sistem (OS threads) prin clasa Thread. Deși implementarea standard CRuby (MRI) folosește un GVL (Global VM Lock) care permite doar unui singur fir să execute bytecode Ruby la un moment dat, operațiile I/O (rețea, fișiere, interogări baze de date) eliberează GVL-ul, obținând o scalabilitate masivă.

Descărcarea paralelă de date cu Thread și Thread.join
url_uri = [
    "https://api.dexblog.ro/curs-valutar",
    "https://api.dexblog.ro/meteo",
    "https://api.dexblog.ro/stiri-tehnice"
]

fire_executie = []

url_uri.each do |url|
    fire_executie << Thread.new do
        # Simulăm un apel HTTP extern de rețea (care eliberează GVL):
        sleep(0.5)
        puts "[Thread #{Thread.current.object_id}] Descarcat: #{url}"
    end
end

# Așteptăm ca toate firele să își finalizeze execuția:
fire_executie.each(&:join)
puts "Toate cererile s-au finalizat în paralel!"
Sincronizarea cu Mutex pentru prevenirea condițiilor de cursă (Race Conditions)
contor = 0
mutex = Mutex.new

fire = 10.times.map do
    Thread.new do
        1000.times do
            # Blocul synchronize asigură că un singur fir modifică variabila 'contor':
            mutex.synchronize do
                contor += 1
            end
        end
    end
end

fire.each(&:join)
puts "Valoarea finală corectă a contorului: #{contor}" # Exact 10000
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Concurență și Multithreading în Ruby: Thread, Mutex și Queue

Ai o nelămurire despre utilizarea comenzii Concurență și Multithreading în Ruby: Thread, Mutex și Queue sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.