İşletim sistemlerimiz çalışmaya başladıkları anda onlarca, belki yüzlerce işlemi gerçekleştirmeye başlar. Eğer çok işlemcili bir sisteme sahip değilseniz tüm bu işlemleri aynı anda yapmanız pek mümkün değildir. Fakat yine de bu durum işlemleri “neredeyse aynı anda” yapmaya engel değildir. Bu yazıda bahsedeceğim Multithreading ise tam olarak bu “neredeyse” tanımının karşılığı olacak.
Bir işlemin başlangıcında bir main thread oluşturulur ve işlemin çalışmasını bu thread yönetir. Süreç içerisinde ihtiyaç halinde yeni threadler oluşturulabilir.
Öncelikle Thread Nedir?
Multi-Threading nedir öğrenmeden önce gelin Thread’in ne olduğunu inceleyelim. Thread, bir işin eş zamanlı olarak işlenen her bir bölümüdür.
İşletim sistemi tarafından çalıştırılabilecek en küçük kısmını ifade eder. Bu İşletim sisteminin çekirdeği tarafından (kernel scheduler) belli donanım bileşeni üstünde çalıştırılması için atanır.
Peki ya Multithreading Nedir?
Bilindiği üzere Multithreading, bir uygulama içerisinde birden fazla thread kullanılması durumudur. Peki ya buna neden ihtiyaç duyarız?
Örnek bir senaryo üzerinden gidecek olursak;
Basit bir konsol uygulaması hazırladığımızı düşünelim. Bu uygulamanın içerisinde çalıştırılmasını istediğimiz iki adet fonksiyon bulunsun. Bunlardan birisi belirlediğimiz sayıyı büyükten küçüğe doğru (CountDown Fonksiyonu), diğer fonskiyonumuz ise küçükten büyüğe (CountUp Fonksiyonu) doğru saysın.
public static void CountDown() { for (int i = 10; i >= 0; i--) { Console.WriteLine("Timer #1 : " + i + " seconds"); Thread.Sleep(1000); } Console.WriteLine("Timer #1 is complete!"); }
public static void CountUp() { for (int i = 0; i <= 10; i++) { Console.WriteLine("Timer #2 : " + i + " seconds"); Thread.Sleep(1000); } Console.WriteLine("Timer #2 is complete!"); }
Şimdi sırasıyla CountDown() ve CountUp() metotlarını çağıralım. Eğer biz tek (main) thread ile bu işlemi yapmak istersek oluşacak senaryo açık bir şekilde ilk önce CountDown metodu sonuna kadar çalışacak, bittiğinde ise CountUp metodu çalışacaktır.
static void Main(string[] args) { CountDown(); CountUp(); }
Peki ya biz iki fonksiyonun da “neredeyse” aynı anda çalışmasını istersek ne yapmamız gerekiyor?
Evet, cevabınızı duyar gibiyim. Bu kısımda multithreading devreye giriyor.
static void Main(string[] args) { Thread thread1 = new Thread(CountDown); Thread thread2 = new Thread(CountUp);
thread1.Start(); thread2.Start(); }
Şeklinde main thread haricinde iki adet thread oluşturduğumuzda;
Hem uygulamamıza eğer verirsek başka bir görevi yapmaya devam edebilecek, hem de bu iki sayma işlemini başarıyla tamamlayacaktır.
Hiç yorum yok:
Yorum Gönder
Görüş ve Düşüncelerinizi Bizimle Paylaşmayı Unutmayın.