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 O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.