Linux Sistem Programlama
  • Kapak
  • Önsöz
  • Sistem Programlamaya Giriş
    • Tarihçe
    • Standartlar
    • Sistem Çağrıları
    • API ve ABI
  • Linux Çekirdeği
  • Kabuk
  • Dosya Sistemi
  • Kullanıcı, Grup ve Erişim Yetkileri
  • Process Kavramı
  • Dosya İşlemleri
  • IO Modelleri
    • Senkron IO
    • Asenkron IO
  • Sinyaller
    • Temel Kavramlar
    • Sinyal Yakalama ve Gönderme
    • Signal-Safe Kavramı
    • Sinyal Kümeleri
    • Sinyal Bloklama
    • Sinyal İle Birlikte Veri Gönderimi
    • Sinyal ve Core Dump
    • RealTime Sinyaller
    • File Descriptor Üzerinden Sinyal İşleme
    • Genel Değerlendirme
  • Thread Kullanımı
    • Thread Oluşturma
    • Thread Türleri
    • Thread Sonlandırma
    • Mutex Kullanımı
    • SpinLock & Mutex Karşılaştırması
    • Futex
  • Semafor Kullanımı
    • Semafor ve Mutex Karşılaştırması
    • Semafor Türleri
    • Semafor Operasyonları
  • Shared Memory Kullanımı
  • Memory Mapped IO
  • Soket Kullanımı
    • Soket API
    • TCP Soketleri
    • UDP Soketleri
    • UNIX Soketleri
    • Birden Çok İstemciyle Çalışma
  • Timer Kullanımı
    • Basit Timer Yapıları
    • POSIX Timer API
    • Event Loop İçinde Kullanım
  • Daemon Oluşturma
  • Capabilities API
  • Paylaşımlı Kütüphaneler
    • Kütüphane Gereksinimi
    • Statik Kütüphaneler
    • Kod Referanslarının Ele Alınması
    • Paylaşımlı Kütüphanelerin Oluşturulması
    • Dinamik Yükleme
    • Derleme Zamanında Kütüphanelerin Aranması
    • Çalışma Zamanında Kütüphanelerin Aranması
    • Statik ve Dinamik Kütüphanelerin Beraber Kullanılması
    • Versiyon Yönetimi
  • Process'ler Arası Haberleşme
  • Memory Allocation
  • Memory Barriers
  • Hata Ayıklama Yöntemleri
    • GNU Debugger
    • Strace
  • GNU Build Sistemi Araçları
    • Make
    • Autoconf, Automake
  • Ek Bölümler
    • Derleyici Optimizasyonları
    • Clang ve LLVM
    • İçsel ve Anonim Fonksiyonlar
      • İçsel Fonksiyonlar
      • Anonim Fonksiyonlar
    • FreeTDS ile SqlServer Bağlantısı
  • Kaynak Dosyalar
Powered by GitBook
On this page

Was this helpful?

Thread Kullanımı

PreviousGenel DeğerlendirmeNextThread Oluşturma

Last updated 5 years ago

Was this helpful?

Linux altında thread kullanımı C kütüphanesinin bir parçası olan pthread kütüphanesi ile yapılmaktadır.

Diğer işletim sistemlerinin aksine, Linux'te thread ile process arasında çok az fark vardır.

Bu nedenle thread'ler, LightWeightProcess olarak adlandırılmaktadır.

Linux versiyon 2.6 öncesindeki thread implementasyonu LinuxThreads şeklinde adlandırılıyordu. Bu implementasyon performans ve senkronizasyon işlemleri açısından önemli limitlere sahipti. Maksimum çalışabilecek thread sayısı 1000'li rakamlarla sınırlıydı.

2003 yılında özellikle IBM ve RedHat firmasındaki geliştiricilerin başını çektiği ekip, Native POSIX Thread Library (NPTL) projesini kullanılabilir duruma getirmeyi başardı ve ilk olarak enterprise dünyanın Linux üzerinde Java Virtual Machine performansı şikayetlerini çözüme kavuşturmak için RedHat Enterprise versiyon 3'te kullanılmaya başlandı. Ardından GNU C kütüphanesindeki yeni NPTL implementasyonu gelmeye başladı. Günümüzde de her iki implementasyon glibc içerisinde yer almakta, kullanılan çekirdek versiyonu tarafından uygun implementasyon seçilmektedir.

Daha detaylı bilgi için en önemli ilk 5 Linux gurularından olan Ulrich Drepper ve Ingo Molnar'ın dizayn dokümanını inceleyebilirsiniz:

Çalışan thread implementasyonunu getconf GNU_LIBPTHREAD_VERSION komutuyla öğrenebilirsiniz.

Her iki implementasyon da thread yönetiminin tamamen kullanıcı kipinde çalışan bir Virtual Machine üzerinde yapıldığı green threads uyarlaması değildir.

Her program başlatıldığında, bir kernel thread'i de otomatik olarak oluşturulur.

Çalışan herhangi bir process'in thread spesifik bilgileri /proc/<PID>/task dizini altında yer alır. Single-thread uygulamalar için de bu dizin altında PID ile aynı değere sahip bir task kaydı olduğu görünecektir.

http://www.akkadia.org/drepper/nptl-design.pdf