Ara ara burada yazdığım Ruby kodlarını yayınlayacağım. Daha önce yayınladığım bu küçük programa ek olarak 2 program daha geliyor... İlk programımız Ruby de thread lerin kullanımını gösteriyor.
=begin
Bir bankadaki müşteri ve memurların çalışma düzenleri simüle edilmistir. Bankadaki memur sayısı sabit tutulmus her thread in bir memuru temsil ettiği var sayılmıstır. Musteriler ise rastgele aralıklarla olusturulup musteri kuyruguna eklenmektedir.
=end
require "thread"
$global = 0 #global degisken
trap "SIGINT" , proc { # Programdan ctrl+c ile cikilması icin yordam düzenleniyor
puts "Su ana kadar " + $global.to_s + " musteriye hizmet verildi..."
exit
}
class Memurlar
def hizmet_ver (i)
sleep i # Musteriye Gore Degisen Hizmet Zamani
end
end
class Musteri
def zaman
return rand(5) # Musteri icin gereken islem zamani
end
end
def anaProgram
puts "Programdan çıkmak icin Ctrl ve C tuslarına birlikte basin"
sleep (5)
srand Time.now.to_i # Rastgele sayi üreteci baslatiliyor
memurlar = Memurlar.new #Yeni Memur nesnesi olusturuluyor
threads = [] #threadler dizisi hazırlanıyor
kuyruk = Queue.new # Musterilerin bekleme kuyrugunu temsil eder
musteriOlusturucu = Thread.new{ loop{
sleep rand(4) # Yeni musteri gelmeden gecen rastgele bekleme suresi
# Bu deger degistirilerek kuyruktaki musteri sayısı kontrol edilebilir
musteri = Musteri.new # Yeni musteri olusturuluyor
puts "Yeni Musteri Geldi Musteri No" + musteri.object_id.to_s
kuyruk << musteri # Musteri kuyruga ekleniyor
puts "Kuyrukta Bekleyen " + kuyruk.size.to_s + " Musteri Var"
}
}
3.times { |s| s += 1 # Memurları temsil eden 3 thread olusturuluyor
threads << Thread.new { loop{
musteriX = kuyruk.pop #kuyruktan yeni musteri cagiriliyor
i = musteriX.zaman # Musterinin hizmet zamanı alınıyor
puts "Memur" + s.to_s + " Hizmete Basladi Musteri Kodu" + musteriX.object_id.to_s
memurlar.hizmet_ver(i)
puts "Memur" + s.to_s + " in isi Bitti"
sleep rand(3) #Musteriler arasındaki bekleme suresi
$global += 1
}
}
}
threads.each { |aThread| aThread.join } # Threads dizisinde var olan threadler sırayla
# cagirilip aktive ediliyor
end
anaProgram # anaProgram calistiriliyor.
1 yorum:
Eğer web programlama ile uğraşmak istiyorsanız öncelikle temel programlama bilgisini edinmenizde fayda var. Ruby bunun için iyi bir başlangıç olabilir. Yazımı temizdir. Öğrenmesi kolaydır. eğer ingilizcenizi yeterli görmüyorsanız programlama öğrenmeye java ile de başlayabilirsiniz. (Bora güngörenin java kitaplarını tavsiye ederim).
Yazdığım kodlara gelince Ruby de yazdığınız kodları RoR ile kullanabilirsiniz tabiki ancak bir iki ufak değişiklik gerekebilir. Örneğin programın başındaki ctrl+c kesmesini yakalayan kısım ve puts ile ekrana yazı yazan kısmı değiştirmeniz lazım.
Yorum Gönder