Bilmek istediğin her şeye ulaş

Üç gündür kafamı karıştıran bir konu ile boğuşuyorum: multithreading. Öncelikle thread nedir tam olarak? Bir thread ne zaman oluşturulur. Bir program çalıştırıldığında sahip olduğu tüm thread'ler da o zaman mı yaratılır yoksa thread'e ait olan bir kod çağrıldığı zaman mı?

Threadleri bir ana programa bağlı çalışan alt programlar olarak düşünebilirsin. Ana program o alt programları istediği gibi kontrol edebilir, yenilerini başlatabilir, olanları öldürebilir, onlara belirli sinyaller (komutlar) gönderebilir.

Threadler çok sonra da yaratılabilir, baştan da yaratılabilir. Bu ana programın _keyfine_ kalmıştır.

Mesela web sunucusu Apache, gelen isteklere cevap verecek threadlerle çalışır. Bu alt threadlerin durumlarını takip eder ve gelen istekleri müsait olanlara dağıtır. Apache ayarlarından threadleri baştan mı yaratsın, kaç tane yaratsın, lazım olunca mı yaratsın gibi her türlü ayarı yapabilirsin.
  • Paylaş
Yazdığın uygulamayı, derlenmiş olan kod satırlarını tek tek sırayla çalıştıran bir işlem (process) olarak düşün. Bir ana (main) thread vardır programı ayakta tutan. Kendin ekstra başka thread kullanacak bir kod yazmadığın sürece, yazdığın tüm kodlar, tüm metot çağrıların bu ana thread üzerinde çalıştırılır. Tek thread ile çalışırsan, uygulamaya aynı anda iki farklı görevi yaptıramazsın. Birden fazla thread kullanırsan, uygulama birden fazla görevi, birbirinden bağımsız olarak paralel olarak çalıştırabilir.

Yazdığın uygulama içerisinde "Yürü" ve "Şarkı Söyle" isimli iki farklı metot (yordam) olduğunu düşün. Bu iki yordamı arka arkaya çağırdığında, ikisi de ana thread üzerinde çalışacağı için, önce "Yürü" tetiklenir, Yürü içerisindeki tüm işlemler tamamlanır ve daha sonra "Şarkı Söyle" metodunun tetiklenmesi gerekir. Yani uygulama aynı anda yürüyüp şarkı söyleyemez. Ancak "Yürü" yordamını, farklı ikinci bir thread içerisinde çalışacak şekilde çağırırsan, ana thread "Yürü" işleminin bitmesini beklemez, çünkü metot içerisindeki işlemler farklı bir thread üzerinde çalışmaya başlamıştır. Ana thread sadece işlemi tetikler ve kodları yürütmeye hemen devam eder. Bir sonraki satıra geçip "Şarkı Söyle" işlemini başlatabilir. Böylece uygulama yürürken şarkı söyleyebilir.

Hangi dil kullandığını bilmiyorum. Ama C# ve Java için en bilindik örneği Timer kullanımıdır. Timer nesnesi asenkron çalışır ve temel mantığı arka planda farklı bir thread kullanarak işlemleri yürütmesidir. Böylece Timer'ın çalıştırdığı görev/yordam diğer işlemleri durdurmaz.
  • Paylaş
Sonraki Soru
HESAP OLUŞTUR

İstatistikler

19 Görüntülenme4 Takipçi2 Yanıt