POSIX Thread Nedir?
Threadler, işletim sistemi üzerinde o sırada koşmakta olan işlemlere benzer. Bu işlemlerin yönetimi yani hangisinin daha önce çalışacağı yada işletileceği işletim sistemi çekirdeği tarafından belirlenir.Tek işlemciye sahip sistemlerde örneğin mikrodenetleyicilerde işletim sistemi çekirdeği zaman dilimlemesi yaparak, işlemlerin eş zamanlı olarak yürütülebilmesi için sistemi simule eder. Aslında her işlem aynı anda çalışmaz. Tek çekirdeğe sahip işletim sistemlerinde bir zaman diliminde sadece bir işlem gerçekleştirilebilir.Fakat birden çok çekirdeğe sahip veya birden fazla işlemciye sahip sistemlerde bu işlemler aynı anda yürütülebilir. Çünkü artık bağımsız bir yürütücü organ mevcuttur lakin bu işlemlerin yönetimini yine işletim sistemi çekirdeği yapar. Bu sayede 1 tane işlemden tutun 10.000ler'ce işlem eş zamanlıymış gibi işletilebilir.Bu aşamadan sonra işlemler task adıyla anılıcaktır.
Maximum işlem sayısı işletim sisteminin sahip olduğu kaynaklar taskların ve çekirdek objelerinin (mutex,semaphore,malloc) kullandığı heap ve stack alanlarına bağlıdır. Bu alanlar RAM üzerinde dinamik veya statik allocate edilebilir.
Yazılımınızda POSIX iş parçacığı kitaplığını kullanma amacı, yazılımı daha hızlı çalıştırmaktır.
İşlem oluşturma ile Thread Oluşturma Arasındaki Fark ?
fork();
Amaç, fonksiyonu çağıran işlemin yeni bir alt işlemini yaratmaktır. Parent-Child.
Artık her iki işlem de fork () sistem çağrısını takip eden yerden bir sonraki talimatı yürütecektir
Bilgisayarın adres alanının, kodunun ve stack'in iki özdeş kopyası ebeveyn ve çocuk için oluşturulmuştur.
fork()
çalıştırdığınız programınızın bir kopyasına neden olur.
pthread_create ()
Amaç, fonksiyonu çağıran işlemin farklı bir işlemini yaratmaktır.
Aynı işlem içindeki ögeler, paylaşılan bellek kullanarak iletişim kurabilir.
İkinci iş parçacığı veri, açık dosyalar, sinyal işleyicileri ve sinyal atımlarını, mevcut çalışma dizini, kullanıcı ve grup kimliklerini diğer threadler ile paylaşacak.(fork() ta bu yok). Yeni threadin kendine has stack, heap ve thread kimliği olacaktır.
Benzetmeye devam edersek; programınız (süreç) yeni bir thread oluşturduğunda aynı beyne bağlı ikinci bir kol yetişir.
Posix threadler sayesinde bir thread yaratılmadan önce , thread senkronizasyonu ayarlanabilir ve posix thread objeleri sayesinde threadler arasında senkronizasyonlar sağlanabilir. Ufak bir senkronizasyon sayesinde threadlerin kullanacağı aynı memory bölgelerindeki veriler okunup/yazılabilir.Ama daha fazlası var. standart fork() fonksiyonuna kıyasla, posix threadler daha az masraflıdır. posix ile thread oluşturma fork() fonksiyonu ile oluşturulan işlemlerden 100 kat daha hızlı oluşturulur.Fork() ile oluşturulan işlemler işlemci üzerinde büyük bir yük oluşturur iken, posix threadler oldukça hafif bir yük oluşturur. Bu sayede farklı threadler üzerinde farklı threadlerde hızlı oluşturulabilir.
Elbette, işlemlerdeki gibi, iş parçacıkları birden fazla CPU'yu kullanacaktır. Yazılımınız çok işlemcili bir makinede kullanılmak üzere tasarlanmışsa bu gerçekten harika bir özelliktir. Belli türde iş parçacıklı programların performansı (özellikle işlemci yoğun olan programlar), sistemdeki işlemci sayısıyla hemen hemen doğrusal olarak ölçeklenir. Çok CPU yoğunlu bir program yazıyorsanız kesinlikle kodunuzda birden çok iş parçacığı kullanmanın yollarını bulmak istersiniz. İş parçacıklı kod yazarken becerikli olduğunuzda, IPC araçları ile kodlama zorluklarına yeni ve yaratıcı yollarla da yaklaşabilirsiniz. Tüm bu avantajlar, çok iş parçacıklı programlamayı eğlenceli, hızlı ve esnek yapmak için sinerjik olarak çalışır.