Ruby ile Thread İşlemleri

Merhabalar,

Şu zamana kadar yazdığım yazılarda Ruby ile ilgili pek çok konuya değindik, bu konular arasında POP3 ve SMTP, HTTP ve FTP, Dosya İşlemleri, Çalışma zamanı, Module yapısı, Hata yakalama, Resim işlemleri, ODBC veri tabanı bağlantısı, Ruby nesnelerinin karşılaştırılması gibi konular mevcut. Aslında tüm bu yazılardan küçük bir kitap bile çıkabilirdi ama elbetteki yazım dilinin tekrar bir elden geçirilmesi gerekli. Her neyse, şu zamana kadar yazdığım yazılar umarım sizlerin de işine yaramıştır :). Benim yaradı valla, ben Ruby ile ilgili bazı konularda kendi bloğuma bakıyorum :).

SÖzü uzatmadan başlıktan da anlaşılacağı gibi yazımızın konusuna yani Thread’lere(Türkçe’sini tam kestiremedim, hoşgÖrün lütfen) geçelim. Şimdi eğer bir yazılımcıysanız, daha Önceden Multi-Thread uygulamalar ile uğraşmıssanız, kolay bir konu olmadığını bilirsiniz. Gerçekten Özellikle zor zamanlarda çok uyuz bir konu olabilir. Tüm bunlardan Öte, yapımı ve tasarlanması çok pahalıya patladığı için, yazılımcılar tarafından pek tercih de edilmez. Ama işler Ruby’de biraz daha farklı, çünkü Ruby’de bu işlemler oldukça basit ve etkileyici :).

Çok kısa ve hoş bir Örnek ile Ruby’nin bu konu ile ilgili birçok Özelliğini açıklamaya çalışayım..

$stdout.sync = true

puts "Başlangıç zamanı : #{Time.now}" # Başlangıç zamanı
# Herhangi exception'da tüm Thread'leri durdur.
Thread.abort_on_exception = true
allLogThread = [] # Tüm Thread'lerin saklandığı dizi.
4.times do |index| # Toplamda 2 * 3 = 6sn'lik işlem.
	# index değişkeni bu şekilde parametre geçilerek, thread-safe halini alır.
	logThread = Thread.new(index) do |number|
		sleep(number) # number sn.'lik işlem olduğunu düşünelim
		print "Logging...#{number}\n"
	end
	allLogThread << logThread
end

sleep(2) # 2 sn. lik işlem olduğunu düşünelim
print "Asıl işlem\n"

# Tüm Thread'lerin bitmesi bekleniyor.
allLogThread.each { |thread| thread.join }
puts "Bitiş zamanı : #{Time.now}"

Yukarıda yer alan işlemlerin aslında 8 sn.’de bitmesi gerekirken (sleep(0) + sleep(1) + sleep(2) + sleep(3) + sleep(2) = 8 sn.) tüm işlemler 3 sn. içerisinde biter. Kullanması işte bu kadar basit ve güvenlidir.

Artık elinizde en az iki adet ve birbirinden bağımsız iş var ise, hiç düşünmeden Ruby’nin basit fakat çok kullanışlı olan Multi-Thread teknolojisi ile programınızın performansını yükseltebilirsiniz.

Kolay gelsin.. :)

Share