Article View: pl.comp.lang.ruby
Article #1116Re: Ryby - wątki ?
From: Jan Słupicki
Date: Sun, 20 Jul 2008 17:24
Date: Sun, 20 Jul 2008 17:24
55 lines
3263 bytes
3263 bytes
Jan Koniecka pisze:
> Witam,
> Mam zamiar napisać mały programik, który będzie wykorzystywał wątki. Mam
> więc pytanie jak zachowuje się Ruby z wątkami. Czy ktoś już stosował i
> jak wygląda sprawa wydajnościowa. Chodzi o to, iż wątki, które chce
> napisać będa odwoływały się dość czesto do bazy danych lub plików. Jak
> zachwowuje sie Ruby jeśli np wątki obciążają procek do 90% i czy jest to
> możliwe ?
Pamiętaj że wątki Ruby-ego nie są wątkami natywnymi (przynajmniej przy
obecnej maszynie wirtualnej). Dlatego same z siebie nie dadzą ci
jakiejkolwiek korzyści wydajnościowej. Jeśli jednak mocno będziesz
korzystać z bazy danych to możesz na na wątkach mimo wszystko zyskać.
Dzięki wątkom możesz otworzyć wiele połączeń z bazą i zadać wiele
zapytań jednocześnie. Większość baz danych dobrze korzysta z wątków i
wiele jednoczesnych zapytań wykona szybciej niż te same zapytania
wykonane kolejno.
Jeśli jednak masz dużo przetwarzania w Ruby to lepiej użyj JRuby - on
używa wątków natywnych i jak masz wielordzeniowy procesor to różnice
będą znaczne. Możesz też poczekać na Ruby 2.0 :-)
Co do zachowania się pod dużym obciążeniem to chyba więcej zależy od
systemu operacyjnego. W zwykłym Ruby to nie problem bo chodzi na jednym
wątku. W JRuby już trzeba uważać bo np. Windows XP nie najlepiej sobie
radzi z większą ilością wątków. Moje doświadczenia wprawdzie odnoszą się
do Javy ale powinny pasować też do JRuby. Pod Windows XP na procesorze
jedno rdzeniowym program zachowywał są poprawnie do około 50-60 wątków.
Potem system sobie nie radził. Na SUN OS i gorszym wydajnościowo
sprzęcie program chodził świetnie przy 300 i więcej wątkach.
Jak chcesz zobaczyć różnicę między Ruby a JRuby to uruchom poniższy
program:
require "time"
require "thread"
THREADS = 20
SIZE = 1000000
start = Time.now
puts "Start"
threads = (1..THREADS).map do |i|
puts "Uruchamiam watek #{i}"
Thread.new(i) do |t|
Thread.current[:id] = i
(1..SIZE).map {|e| rand(100)}.sort
puts "Zakonczylem watek #{t}"
end
end
while t = threads.find {|lt| lt.alive?}
t.join
end
puts "Koniec : #{Time.now - start} s"
--
Jan Słupicki
Technical Details
Message-ID:
<g5vsd0$kal$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<g5382g$ihp$1@news2.task.gda.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: Jan Słupicki <jan.slupicki@gmail.com> Newsgroups: pl.comp.lang.ruby Subject: Re: Ryby - wątki ? Date: Sun, 20 Jul 2008 19:24:48 +0200 Organization: Onet.pl Lines: 55 Message-ID: <g5vsd0$kal$1@news.onet.pl> References: <g5382g$ihp$1@news2.task.gda.pl> NNTP-Posting-Host: h82-143-144-44-static.e-wro.net.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1216574688 20821 82.143.144.44 (20 Jul 2008 17:24:48 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Sun, 20 Jul 2008 17:24:48 +0000 (UTC) X-Sender: QUtwkNUfRr+yTF3P+/JH0tNozHMeJQaU In-Reply-To: <g5382g$ihp$1@news2.task.gda.pl> X-Antivirus-Status: Clean X-Antivirus: avast! (VPS 080720-0, 2008-07-20), Outbound message User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit