🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.ruby
Article #1116

Re: Ryby - wątki ?

#1116
From: Jan Słupicki
Date: Sun, 20 Jul 2008 17:24
55 lines
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-mail
References: <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