TeamQuest Blog

Ruby 3.0 wydajniejsze

Ruby 3.0 wydajniejsze

Marcin Sarna , 28.12.2020 r.

Numer wersji zobowiązuje – nowa wersja języka jest 3 razy bardziej wydajna.

W końcu dostępny

Po pół dekadzie prac (rozpoczętych dokładnie w 2015 roku) Ruby 3.0 został wydany w Boże Narodzenie, oferując znacznie większą wydajność i inne nowe funkcje. Ten, całkiem popularny dziś, języka programowania ogólnego przeznaczenia i wysokiego poziomu, został opracowany z naciskiem właśnie na większą wydajność ale nie tylko. Twórcy skupili się także na współbieżności i składni. W rezultacie mamy Ruby 3.0 jest do 3 razy szybszy niż Ruby 2.0. To ucieleśnienie założeń znanych pod nazwą Ruby 3x3.

Może więc warto pójść za naszą ubiegłoroczną radą i zainteresować się Ruby w pracy w IT?

Doświadczę tego?

To trzykrotne przyspieszenie ma miejsce podczas korzystania z nowych możliwości Ruby 3.0 Just-In-Time (JIT), ale nawet w przypadku implementacji maszyny wirtualnej jest to nadal spore przyspieszenie w porównaniu z Ruby 2 (ponad dwukrotne). Tak przynajmniej wynika z benchmarka Optcarrot, który mierzy wydajność na bazie jednego wątka (w oparciu o symulację konsoli NES).

JIT Rubiego 3.0 powinien działać bardzo dobrze szczególnie w takich przypadkach gdy istnieje kilka metod wywoływanych wiele razy.

Pozostałe nowości

Ruby 3.0 dostarcza również eksperymentalnego „Ractor”, który ma zapewnić możliwość równoległego wykonywania kodu bez obaw o bezpieczeństwo wątków. Mało? Fibre Scheduler umożliwia przechwytywanie operacji blokujących, ulepszoną analizę statyczną oraz ulepszone jednoliniowe dopasowanie wzorce porównawcze.

Chociaż Ruby 3.0 znacznie zmniejszył rozmiar kodu wydanego w JIT, nadal nie jest gotowy do optymalizacji obciążeń takich jak Railsy, które często zużywają czas procesora na wielu metodach i dlatego cierpią z powodu błędów i-cache a JIT jedynie pogarsza sytuację. Oczekuje się, że planowany już Ruby 3.1 jeszcze bardziej poprawi wydajność JIT dla obciążeń z większą liczbą metod.

Ractor

Wspomniany Ractor to teoretyczny model (actor-model), współbieżna abstrakcja zaprojektowana w celu umożliwienia wykonywania równoległego metod bez obaw o bezpieczeństwo wątków.

Możesz tworzyć wiele takich „raktorów” i uruchamiać je równolegle. Ractor umożliwia tworzenie programów bezpiecznie posługujących się wątkami współbieżnymi ponieważ nie mogą one współużytkować normalnych obiektów. Raktory ze sobą „rozmawiają”, wymieniając wiadomości.

Aby ograniczyć współużytkowanie obiektów, Ractor wprowadza kilka ograniczeń do składni Rubiego (jeżeli nie zdecydujesz się na korzystanie z wielu ractorów to nie ma takich ograniczeń).

Sprawdź oferty pracy na TeamQuest

Specyfikacja i implementacja tych funkcji nie są jeszcze dojrzałe i twórcy zastrzegają, że mogą one ulec zmianie w przyszłości. Funkcja jest oznaczona jako eksperymentalna i wyświetla stosowane ostrzeżenie gdy tylko pojawi się pierwszy plik Ractor.new.

Poniższy kod mierzy czas wykonania powszechnie znanej rekurencyjnej „tak funkcji”, wykonując ją 4 razy sekwencyjnie lub 4 razy współbieżnie z wykorzystaniem raktorów.

def tarai(x, y, z) =
x <= y ? y : tarai(tarai(x-1, y, z),
tarai(y-1, z, x),
tarai(z-1, x, y))
require 'benchmark'
Benchmark.bm do |x|
# sequential version
x.report('seq'){ 4.times{ tarai(14, 7, 0) } }

# parallel version
x.report('par'){
4.times.map do
Ractor.new { tarai(14, 7, 0) }
end.each(&:take)
}
End

Przykładowe uzyskane rezultaty:

Benchmark result:
user system total real
seq 64.560736 0.001101 64.561837 ( 64.562194)
par 66.422010 0.015999 66.438009 ( 16.685797)

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej