Multithread Kavramı ve Temelleri

      İleri programlama konularından olan Multithread nesnesi yardımıyla birçok program parçacığı aynı anda birbirlerine müdahale etmeden çalıştırmak  mümkündür. Yürütülen iş parçacıklarını bir süre bekletmek  veya istenen anda sonlandırmakta bir başka avantajıdır.

Konunun daha iyi anlaşılması için basit örnekler şeklinde gitmekte fayda var.Örneğimiz şu şekilde olsun.İki tane metodumuz olsun.Bu iki metod birbirini etkilemeden, sıra beklemeden eş zamanlı olarak çalışmasını sağlayalım. Birinci metod char tipli a dan başlayarak z ye kadar harfleri yazacak, ikinci metod ise int tipinde 1'den 30'a kadar olan sayıları yazıyor.Dikkat etmemiz nokta iki metod aynı anda çalıştığında nasıl sonuç alacağımız.

 Burada th1 ve th2 isimli iki nesne örneği birbirinden bağımsız olarak iki ayrı iş parçacığını yönetmektedir. Burada işlemci iş yoğunluğuna göre eşzamanlama işlemini gerçekleştirmektedir. Yani iki farklı iş bitene kadar Harfyaz ve Sayiyaz metodlarını karışık bir şekilde çalıştırmaktadır.işlemcinin durumuna göre hangi metodun ne kadar çalışacağı belirlenmektedir.

Bu programın çalıştırdıktan sonra ortaya çıkan ilginç sonucu şu şeklide olacaktır.Karışık bir şekilde yazılmış sonuç ekranı



Bu durumda çalışan iş parçacıklarından önceliğimiz olanlar olabilir bunu sağlamanın yolu da var.Bu sorunu çözen bir Enum tipli bir özelliğimiz vardır.Thread.Priority adında birçok seçeneği barındırmaktadır.En fazla kullanılan seçenekleri Highest, AboveNormal, Normal, BelowNormal, Lovest olarak sıralayabiliriz.Kullanımı çok basittir.Küçük bir demo yapalım.

 Örnekte görüldüğü gibi istediğimiz metoda öncelik verebiliyoruz.Diğer seçenekleri de deneyerek çalışmalarımızda kolaylık sağlayacak çalışmalar yapabiliriz.

 

Aynı anda çalışan kanallar birbirlerinin çalışmalarının bitmesini beklerler.Bir kanal diğer bir kanalın çalışması sonlanmadan harekete geçmez.

Thread sınıfının en fazla kullanılan metodu Sleep'tir.Bu metod çalışan parçacığın ne kadar süre bekleyeceğini deyim yerindeyse mola süresini belirler.Buna neden ihtiyaç duyarız.Çünkü çalışan iş parçacığını CPU'u fazla meşgul etmemesini sağlamak zorundasınız.Örneğin döngüler CPU'yu çok yükseltir.Bu sorunu gidermek için Thread.Sleep() static metodunu çalıştırarak içine istediğimiz değeri yazabiliriz.Örneğin;  Thread.Sleep(20) değeri 20 milisaniye beklememizi sağlar.Uygulama yaparak bu özelliği ve kazandırdıklarını yakından görelim.Bir tane dizimiz olsun bu dizinin  değerlerini ekrana yazdıralım.

 

 Solda yazdığımız kodların sonuçları sağdadır.Program ilk derlendiğinde Dizi metodu çalışıyor 2000 milisaniye bekledikten sonara Dizideki  10 ve 30 değerlerini yazdırıyor.Yandaki programda aslında Main metodu kendi içinde çalışmakta ve kendi içinde yeni bir iş parçacığı oluşturmaktadır.Ve aynı şekilde onu çalıştırmaktadır.

 

 Multithread konusuna kısa giriş yaparak bu derin yapıdaki çalışmalarıma giriş yaptım.Düzenli ve sürekli bir şekilde bu konunun iç hatlarını yazmaya çalışacağım.Bir sonraki yazımda bu işeyişi daha derin bir şekilde kısır döngüler ve kısır döngüden çıkmayı yazacağım.