Thread (iplik, lif, iz)

Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerinde özellikle işletim sistemi (operating systems) konusunda kullanılan önemli terimlerden birisidir. Bir işletim sisteminde ya da yazılan bir programda birden fazla işin aynı anda yapılması için kullanılırlar.

Bilindiği üzere işlemci (CPU) anlık olarak tek iş çalıştırabilir, ancak işletim sistemi tasarımında kullanılan bazı yöntemlerle birden fazla iş aynı anda yapılıyor gibi işlemcinin kullanılması mümkündür. Bu noktada birden fazla işi yapmak için iki ayrı teknolojiden bahsedilebilir. Bunlardan en sık kullanılanı işlemdir. (process) . Bir işlem, işletim sisteminin kendisinden çatallanan (Fork) ve kendi başına hafızada yer kaplayan, işletim sisteminin işlemci zamanlama algoritmasına (cpu scheduling algorithm) bağlı olarak sırada bekleyen veya çalışan yapıdır.

Bu yazının konusu olan iplikler (threads) ise bazı kaynaklarda hafif işlem (lightweighted process) olarak geçmekle birlikte varlıkları bir işleme bağlı olan ve yine aynı anda birden fazla işi yapmaya yarayan yapılardır. Kısacası bir ipliğin (thread) vâr olması için önce bir işlemin var olması gerekir. Tersi ise gerekmez yani her işlem çatallanması sonucunda bir iplik oluşturulmaz.

İpliklerin diğer önemli bir özelliği ise bir işlemin altında çalışıyor olmalarından dolayı bu işlemin içerisindeki bütün haklara sahip olmalarıdır. Bu haklardan önemli bir tanesi de hafıza erişim hakkıdır. Dolayısıyla bir işlem (process) tarafından üretilen bütün işlemler, bu işlemin hafızada kapladığı yere erişebilirler. Bu ise bize paylaşılmış hafıza (shared memory) olarak bilinen ve ipliklerin kodlanmasında önemli bir rol oynayan özelliği kazandırır.

Kabaca bir işlemdeki bir değişkeni sadece bu işlem değiştirebilir. Bir iplikteki değişkeni ise aynı işlem tarafından üretilmiş bütün iplikler değiştirebilir veya okuyabilir. Bu şekilde iplikler arasında paylaşılan değişkenlere de paylaşılan değişken anlamında shared variable ismi verilir.

İplikler ayrıca teknolojik olarak işlem üretme sorunu olan ortamlarda önem arz eder. Örneğin java teknolojisinde işlem üretme fırsatı yoktur. Bunun sebebi java kodlarının çalıştığı ve JVM (Java Virtual Machine) olarak bilinen java sanal makinesinin zaten bir işlem olarak çalışıyor olması ve bu işlemin kendisi dışında işlemler üretemediği durumlarda da başarılı bir şekilde çalışması isteniyor olmasıdır. Örneğin java kodları çok işlemli olmayan ve birden fazla işlemin üretilemeyeceği ortamlarda da çalışabilmelidir. (Burada java’nın WORA , write once run anywhere (bir kere yaz, her yerde çalıştır) sloganını hatırlamak gerekiyor). Bu yüzden bir java programı çalışacağı ortamda işlem üretebilecek olsa bile JAVA dilinde buna izin verilmemiştir ve bütün aynı anda yapılması istenen işlemler çoklu iplik (multi threaded) yapıya yüklenmiştir.

Yorumlar

  1. Fatih

    Hocam javada(applet) bir program yazıyorum ancak bir noktada takıldım.Programda arabalar var ve iki adet yol var.yolun bir tanesinden arabalar herhangi bir hızda rastgele geciyorlar.(burada bir sorun yok).Ancak diger yolun sonunda yol kapagı var(kopru geçiş sisteminde ki acılan kapanan kapak gibi).Gerceklestirmek istedigim sey,kapaklı olan yola gelen arabalar durduktan belirli bir saniye sonra(orn 3 veya 4 gibi) kapagın acılması ile tekrar hareket etmesi.Thread kullanımında acemi oldugum icin bunu gercekleştiremedim.Cunku ekrandaki nesne hareketlerinin gorunur kılınması adına paint(Graphics) metotunda zaten bir Thread.sleep() komutu aktif calısıyor.Kısacası problemim, goruntunun farklı noktalarını birbirinden nasıl ayırt edebilirim.Sagdaki arabalar ekranda dururken soldaki arabaların bu durumdan etkilenmemesi gerekiyor.Umarım derdimi anlatabilmişimdir hocam yardımızı bekliyorum.

  2. Şadi Evren ŞEKER Article Author

    Basitçe, birbirinden etkilenmesini istemediğiniz nesnelerin tamamını ayrı birer lif (thread) yerleştiriniz. Böylelikle herbirisi bağımsız çalışır. Ayrıca bekletmek istediğiniz lif için sizinde belirttiğiniz gibi Thread.sleep() fonksiyonunu kullanabilirsiniz. Thread.sleep() fonksiyonu sadece çağrıldığı lifi (thread) uyutur, diğer lifler çalışmaya devam eder.

  3. hayri oğuz

    hocam merhabalar, dokuz eylül üniversitesi bilgisayar mühendisliği bölümü öğrencisiyim, ilginç bir paralel proceccing problemiyle karşılaştım, değerli zamanından biraz çalarak bu konuda fikrinizi almak isterim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir