20.6. Równoległe uruchamianie bloku kodu dla wielu obiektów

Problem

Zamiast przetwarzania w pętli elementów struktury pojedynczo, chcemy uruchomić pewną funkcję dla wielu elementów równocześnie.

Rozwiązanie

Należy zainicjować wątek obsługujący każdy z elementów struktury danych. Poniżej zamieszczono prosty odpowiednik metody Enumerable#each, która uruchamia blok kodowy dla wszystkich elementów struktury danych jednocześnie[122]. Metoda zwraca obiekty Thread, które zainicjowała. Dzięki temu można wstrzymać ich wykonywanie, zniszczyć je lub poczekać na ich zakończenie:

module Enumerable
  def each_simultaneously
    threads = []
    each { |e| threads << Thread.new { yield e } }
    return threads
  end
end

Uruchomienie poniższego kodu z wykorzystaniem ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.