Article View: pl.comp.lang.ruby
Article #696Re: Ruby poza railsami
From: moldovenu
Date: Mon, 22 Oct 2007 18:22
Date: Mon, 22 Oct 2007 18:22
79 lines
4422 bytes
4422 bytes
zgodnie z obietnicami ;) wrzucam kody którymi porównywałem szybkość i zajętość pamięci w perlu, rubym i pythonie. Zasadnicza część, to pliki dao/data_process.(rb|py|pl) które tworzą listę obiektów-rekordów danych (przyjąłem, że właśnie tak chcę porównywać szybkość tych języków). Tworzony obiekt (dao) jest instancją jednokrotnie dziedziczonej klasy z własną metodą sortowania. Nic skomplikowanego. Potem te obiekty sortuję, modyfikuję, znowu sortuję, przeszukuję regexpem... i dostaję takie mniej więcej wyniki: cd dao; perl data_process.pl; python data_process.py; ruby data_process.rb data_process.pl point: list created, 24.313586 total: 24.313586 MEM: 573 data_process.pl point: sorting 1, 6.366267 total: 30.679853 MEM: 673 data_process.pl point: total incr, 1.796528 total: 32.476381 MEM: 673 data_process.pl point: Last sort, 7.006141 total: 39.482522 MEM: 673 rev sort OK data_process.pl point: Find by regex, 2.995174 total: 42.477696 MEM: 735 fives: 200000 data_process.py point: list created 81.5295240879 total: 81.5295240879 MEM: 654 data_process.py point: sorting 1 11.3950788975 total: 92.9246029854 MEM: 654 data_process.py point: total incr 1.5905020237 total: 94.5151050091 MEM: 654 data_process.py point: last sort 11.1945290565 total: 105.709634066 MEM: 654 data_process.py point: Find by regex 15.8707268238 total: 121.580360889 MEM: 655 fives: 200000 fives counted ok MEM: 655 data_process.rb point: list created, 31.129116, total: 31.129116, MEM: 578 data_process.rb point: sorting 1, 5.633625, total: 36.762741, MEM: 578 data_process.rb point: total incr, 5.374478, total: 42.137219, MEM: 578 data_process.rb point: Last sort, 5.565322, total: 47.702541, MEM: 578 data_process.rb point: Find by regex, 7.589033, total: 55.291574, MEM: 595 fives: 200000 Ciekawi mnie, że ruby, choć bardziej dynamiczny od pythona, dużo lepiej sobie radzi w prostych operacjach jak sortowanie. Lepiej nawet od perla. Również czas tworzenia listy jest z ogromną przewagą dla Rubiego vs. py. A nawet szukanie regexpem. No chyba że tam są jakieś błędy...? Drugi test (w makefile jako pierszy) to głównie szybkość wybierania z hasha. hash.pl point: Hash created, 26.208645 total: 26.208645 MEM: 1391 hash.pl point: randoms created /not counted/, 4.211777 total: 26.208645 MEM: 1506 hash.pl point: RAndoms from hash, 17.002721 total: 43.211366 MEM: 1506 hash.py point: Hash created 81.9068770409 total: 81.9068770409 MEM: 842 hash.py point: randoms created /not counted/ 27.4965000153 total: 81.9068770409 MEM: 976 hash.py point: RAndoms from hash 11.7002389431 total: 93.607115984 MEM: 976 hash.rb point: Hash created, 101.553801, total: 101.553801, MEM: 1189 hash.rb point: randoms created /not counted/, 12.131743, total: 101.553801, MEM: 1213 hash.rb point: RAndoms from hash, 17.927992, total: 119.481793, MEM: 1213 Pliki źródłowe do całości http://mountains.ws/varia/rupy.tgz Można po prostu rozpakować i dać "make" Poza linuxowym sposobem sprawdzania pamięci, reszta kodu powinna działać też na innych systemach. Dla kompów <= 1GB ramu warto zmniejszyć zmienną "times" w data_process, aby się nie zaswapować. Disklajmer: testy robiłem pod kątem tego, co mniej-więcej chciałem sprawdzić. Jeśli uważacie, że daną operację w danym języku wydajniej jest zrobić w inny sposób - podzielcie się. Na razie nie cross-postuję tego na py i pl, bo ciekaw jestem waszych komentarzy i uwag. Dobrej zabawy ;) -adam
Technical Details
Message-ID:
<ffippa$u82$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<ff9pcl$219$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: moldovenu <moldovenu@spamu.niet.interia.pl> Newsgroups: pl.comp.lang.ruby Subject: Re: Ruby poza railsami Date: Mon, 22 Oct 2007 20:22:25 +0200 Organization: Onet.pl Lines: 79 Message-ID: <ffippa$u82$1@news.onet.pl> References: <ff9pcl$219$1@news.onet.pl> NNTP-Posting-Host: dxt91.internetdsl.tpnet.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1193077354 30978 83.14.45.91 (22 Oct 2007 18:22:34 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Mon, 22 Oct 2007 18:22:34 +0000 (UTC) X-Sender: XhQPhEXoBt/dj5NN0wQhPQmP4ChPRQ7I In-Reply-To: <ff9pcl$219$1@news.onet.pl> User-Agent: Thunderbird 1.5.0.13 (X11/20070824) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit