"The Grid. A digital frontier. I tried to picture clusters of information as they move through the computer. What did they look like? Ships? Motorcycles? Were the circuits like freeways? I kept dreaming of a world I thought I’d never see. And then, one day, I got in." — Tron: Legacy

2013-05-01

Przyspieszanie skryptów Clojure


Z pewnością wiele osób stroni/unika używania Javy lub innego języka opartego o JVM do uruchamiania skryptów ze względu na bardzo powolny czas startu. Przede wszystkim dotyczy to programistów Clojure, którego rozgrzewka jest, można powiedzieć, baaaaardzo długa jak na wymagania małych skryptów i wręcz przekreśla jakiekolwiek pożyteczne zastosowanie. Jest jednak na to sposób. Trzeba zaprzęgnąć do roboty program o nazwie Drip ( dostępny na: https://github.com/flatland/drip ).

Drip po pierwszym uruchomieniu, które trwa podobnie długo jak zwykłe uruchomienie programu przy pomocy polecenia java, ładuje świeże środowisko Java do pamięci i do takiego czystego środowiska zapodaje program, który uruchamia się niemal natychmiast.
W moim przypadku instalacja Drip wyglądała tak:
sudo sh -c "curl -L http://drip.flatland.org > /bin/drip"
sudo chmod 755 /bin/drip

Przykład 1. Czas wykonania się zwykłego skryptu przy użyciu polecenia java. Prymitywny skrypt przeprowadza mnożenie dwóch liczb.
rs@rs-komp:/tmp$ time java -cp clojure-1.5.1.jar clojure.main -e '(* 10 20)'
200
real 0m1.367s
user 0m1.712s
sys 0m0.064s

Przykład 2. Czas pierwszego wykonania skryptu Clojure z użyciem Drip.:
rs@rs-komp:/tmp$ time drip -cp clojure-1.5.1.jar clojure.main -e '(* 10 20)'
200
real 0m1.921s
user 0m1.760s
sys 0m0.076s

Przykład 3. Czas kolejnego uruchomienia skryptu, tym razem zmieniam treść skryptu.
rs@rs-komp:/tmp$ time drip -cp clojure-1.5.1.jar clojure.main -e '(* 5 10)'
50
real 0m0.203s
user 0m0.028s
sys 0m0.012s

Całkiem wyraźne przyspieszenie względem standardowej Javy.

Trochę więcej o Drip


Jeżeli Drip nie doczeka się połączenia w końcu sam się wyłączy. Czas przetrzymywania JVM w pamięci można wydłużyć tworząc zmienną środowiskową DRIP_SHUTDOWN i nadając jej wartość liczbową reprezentującą czas w minutach. 

Aby ubić uruchomione maszyny trzeba użyć polecenia drip kill, lista uruchomionych maszyn to polecenie drip ps.

Niestety Drip nie działa na Windows i nie zanosi się na port.  

Drip może się integrować z innymi językami. Więcej tu : https://github.com/flatland/drip/wiki

Brak komentarzy:

Prześlij komentarz