döngülerin önlenmesi gerekmektedir.Bunun için bazı teknikler vardır.
Multithread Mimari;
Konuyu iyi anlayabilmek için 2 önemli kavramı bilmek gerekir.
Process:Derlenip çalıştırılan bir programa işletim sistemi içersinde yer alan bir proses denir.
Thread:bir proses içersinde yer alan ve işlem yapan bir rutindir.
Genellikle proses ve thread kavramları birbirine karıştırılır.. Örneğin bir hesap makinası programı ile resim programını ard arda çalıştıralım.Bu iki program işletim sistemi tarafından iki ayrı proses olarak ele alınır.
Bu iki program birbirlerinin yaptığı işlemlere müdahale etmez.Her proses kendi bellek alanı içersinde koşmaya devam eder. Thread ise bir proses içersinde yer alan ve işlem yapan bir rutindir. Bir proses içersinde birden fazla thread var olabilir.Threadler genellikle bir proses içersinde ayrı kanallarda paralel olarak çalışması istenen metodların yürütülmesinde kullanılır.
Threadler sayesinde ayrı metodları aynı anda çalıştırabiliriz. İşletim sistemi her threade çalışması için belli bir zaman aralığı verir.Bu zaman aralığı dolduğunda çalışan threadden çıkılıp, program içersindeki diğer bir metoda veya başka bir threade girilir.Bir metod içersinde yapılan iş ne kadar uzun sürüyorsa o metodun bağlı olduğu threadde o kadar fazla zaman harcanır.Bazen bu süre o kadar fazla olur ki, proses içersindeki başka bir threade çalışması için çok az zaman kalır. Başlatılan threadlerin aynı anda senkron bir şekilde çalışabilmesi için .NETte senkronizasyon teknikleri kullanılır.

Interlocked :sınıfı birden fazla kanal tarafından kullanılan değişkenler üzerinde çeşitli işlemlerin yapılmasına olanak sağlayan bir sınıftır.
Lock :Bir kanal içersindeki işlemlerin, diğer bir kanal tarafından müdahale edilmeden çalışabilmesi için lock anahtar kelimesi kullanılır.lock ile kilitlenen nesne public olmaz cünkü bu nesne üzerinde işlem yapmak isteyen metodlar (bir thread’e bağlı olmayan) da kilitlenir.
Monitor: Nesnelere kanalların senkronize bir şekilde ulaşmasını sağlayan bir sınıftır. Monitor sınıfı referans tipindeki değişkenleri senkronize etmek için kullanılır.
Değer tipindeki değişkenler için monitor sınıfı kullanılmaz. Monitor’ün kullanımı lock’un kullanımına benzer.
Monitor blokladığı kodların başka kanallar tarafından erişilmesini engeller.
Mutex:Kanallar tarafından ortak kullanılan nesnelere aynı anda ulaşılıp, işlem yapılmasını engellemek için kullanılır.
-ortak kullanılan kaynaklara bir t zamanında sadece bir kanalın ulaşabilmesini garanti eder.
-Mutex kendisini kullanan kanalın tekilliğini (identity) kontrol eder.
-Bir mutex’e sahip olan kanal WaitOne metodu ile onu kilitler ve ReleaseMutex metodu ile mutex’i serbest bırakır.
-Bir mutex kullanan kanal sadece kendi mutex’ini ReleaseMutex metodu ile açabilir.
-Kanallar birbirlerinin mutex’lerini serbest bırakamaz.
Semaphore:Semaphore sınıfının Mutex sınıfından farkı, farklı kanalların birbirlerinin Semaphore’larının kilitlerini Release metodu ile açabilmeleridir.
-Bir kanal semaphore’un WaitOne metodunu birçok kez çağırabilir.
-Bu kilitleri açmak için art arda Release metodunu çağırabileceği gibi, Release(int) overload’unu da kullanabilir.
-Semaphore kendisini kullanan kanalın identity’sine bakmaz. Bu yüzden farklı kanallar birbirlerinin semaphore’larının WaitOne ve Release metodlarını çağırabilir.
-Herbir WaitOne metodu çağırıldığında semaphore’un sayacı bir azaltılır. Herbir release metodu çağırıldığında ise sayaç bir arttırılır. Semaphore’un yapılandırıcısında (constructor) sayacın minimum ve maksimum değerleri belirlenebilir.
Hiç yorum yok:
Yorum Gönder