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.