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.