Süreç ve iş parçacığı: bellek ve yürütme açısından farkları
Sözlük

Süreç ve iş parçacığı: bellek ve yürütme açısından farkları

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 4 dk okuma

Süreç kendi bellek alanına sahip çalışan programdır; iş parçacığı ise bir sürecin içinde belleği paylaşan yürütme birimidir. Farklar, örnek ve riskler.

Süreç ve iş parçacığı nedir?

Süreç (process), işletim sisteminde çalışmakta olan bir programın örneğidir. Kendi bellek adres alanı, açık dosya ve ağ bağlantıları, ortam değişkenleri ve kimlik bilgisiyle işletim sistemi tarafından izole edilmiş bir kaptır. Bir iş parçacığı (thread) ise süreç içinde çalışan en küçük yürütme birimidir; aynı sürecin belleğini ve kaynaklarını diğer iş parçacıklarıyla paylaşır, ancak kendi yığınına (stack) ve yazmaç durumuna sahiptir.

Kısaca süreç bir kaynak sahibidir, iş parçacığı ise o kaynaklar üzerinde yürütülen iştir. Her sürecin en az bir iş parçacığı vardır; birden çok iş parçacığı başlatıldığında program aynı anda birkaç işi ilerletebilir.

Temel farklar

Farklar, ölçüt bazında şöyle özetlenebilir:

  • Bellek: süreçler birbirinden ayrı adres alanına sahiptir. İş parçacıkları aynı sürecin belleğini paylaşır.
  • Oluşturma maliyeti: yeni süreç başlatmak genellikle daha ağırdır. İş parçacığı oluşturmak daha hafiftir.
  • İletişim: süreçler birbiriyle boru, soket, paylaşılan bellek ya da mesaj kuyruğu gibi süreçler arası iletişim yöntemleriyle konuşur. İş parçacıkları ortak değişkenler üzerinden doğrudan veri paylaşır.
  • İzolasyon: bir sürecin çökmesi diğer süreçleri genellikle etkilemez. Bir iş parçacığındaki ciddi hata bütün süreci düşürebilir.
  • Bağlam değiştirme: iş parçacıkları arasında geçiş genellikle süreçler arası geçişten daha ucuzdur.

Bu farklar tasarım kararlarını belirler: güvenlik ve dayanıklılık için süreç ayrımı, hızlı veri paylaşımı için iş parçacığı tercih edilir.

Nasıl çalışır?

İşletim sistemi çizelgeleyici (scheduler), hazır yürütme birimlerine işlemci zamanı dağıtır. Tek çekirdekte bile birçok iş parçacığı sırayla çalıştırılarak aynı anda ilerliyor görüntüsü verilir; çok çekirdekli makinede ise gerçekten paralel çalışabilir. Çizelgeleyici bir birimden diğerine geçerken mevcut durumu kaydeder ve diğerinin durumunu yükler: buna bağlam değiştirme denir ve ucuz olsa da bedelsiz değildir.

Linux gibi sistemlerde yeni süreç fork benzeri bir çağrıyla başlatılır, ardından başka bir program yüklenebilir. İş parçacıkları ise pthread gibi bir kütüphaneyle ya da dilin kendi yapılarıyla (Java'da Thread, C#'ta Task ve Thread) oluşturulur. Çekirdek tarafında ise süreç ve iş parçacığı çizelgelenebilir birimler olarak ele alınır; farkı hangi kaynakların paylaşıldığı belirler.

Örnek ve riskler

Örneğin bir web sunucusu düşünün. Bazı sunucular her isteği ayrı bir süreçte karşılar: biri çökerse diğerleri etkilenmez ama bellek kullanımı artar. Bazıları ise bir havuzdaki iş parçacıklarına istekleri dağıtır: daha az bellek tüketir ama ortak veri üzerinde dikkat gerektirir.

İş parçacığı paylaşımının asıl riski, yarış durumudur (race condition). Birden çok iş parçacığı aynı değişkeni kilitsiz güncellerse sonuç, çalışma sırasına bağlı olarak değişir. Çözüm olarak muteks, semafor ya da kilit gibi eşitleme yapıları kullanılır; bunlar yanlış kullanıldığında kilitlenme (deadlock) üretebilir. Bu yüzden tasarımda ortak veriyi en aza indirmek ve değiştirilemez veri yapıları tercih etmek yaygın bir yaklaşımdır.

Benzer kavramlardan farkı

Asenkron programlama, bir iş parçacığının beklerken başka görevleri yürütmesine izin verir; iş parçacığı çoğaltmadan eşzamanlılık sağlayabilir. Hafif iş parçacıkları (green thread, coroutine) çalışma zamanı tarafından yönetilir ve işletim sistemi iş parçacığından daha ucuzdur. Konteyner ise süreçleri izole eden bir paketleme yöntemidir, süreç kavramının yerini almaz; her konteyner içinde süreçler çalışır.

Bu ayrımlar, performans sorunlarını teşhis ederken doğru soruyu sormayı sağlar: sorun işlemci mi, bellek mi, bekleme mi ve hangi birimde birikiyor?

Mindset programlarında süreç ve iş parçacığı

İleri Düzey C# Programlama Dili Eğitimi, asenkron programlama ve çok iş parçacıklı programlamayı dil düzeyinde ele alır; uygulama geliştiricileri için uygundur. Embedded Linux ve Cihaz Sürücüsü Geliştirme programı, çekirdek düzeyinde kesme, eşzamanlılık ve bellek konularını gömülü sistem bakış açısıyla işler. Linux Foundation Certified System Administrator (LFCS) Hazırlık ise sistem yöneticisi gözüyle servis ve süreç yönetimini, yani çalışan süreçleri izleme ve yönetmeyi kapsar.

Kurumsal ekiplerde bu içerikler yazılım geliştiriciler ile sistem yöneticilerinin performans ve kararlılık sorunlarında ortak dil kurmasına yardımcı olur.

İlgili Mindset programı

İleri Düzey C# Programlama Dili EĞitimi

Sık sorulanlar

Sık sorulan sorular

Thread mi process mi daha hızlıdır?

Genel olarak iş parçacığı oluşturmak ve aralarında geçiş yapmak daha hafiftir, veri paylaşımı da daha doğrudandır. Ancak hız tek ölçüt değildir. Süreçler izolasyon sağlar, hata durumunda dayanıklılık sunar ve ortak durum sorunlarını azaltır. Doğru tercih iş yüküne ve güvenilirlik gereksinimine bağlıdır.

Bir sürecin kaç iş parçacığı olabilir?

En az bir tane vardır, üst sınır işletim sistemi, bellek ve yapılandırmaya bağlıdır. Çok fazla iş parçacığı bağlam değiştirme yükünü ve bellek tüketimini artırır. Bu nedenle çoğu uygulama iş parçacığı havuzu kullanarak sayıyı kontrol altında tutar.

Deadlock ve race condition aynı şey mi?

Hayır. Yarış durumu, birden çok iş parçacığının ortak veriye eşitleme olmadan eriştiği durumda sonucun çalışma sırasına göre değişmesidir. Kilitlenme ise iş parçacıklarının birbirinin tuttuğu kilidi beklemesiyle hiçbirinin ilerleyememesidir. Biri yanlış sonuç üretir, diğeri programı durdurur.

Python'da thread kullanmak her zaman hız kazandırır mı?

Hayır. Python'un standart yorumlayıcısında genel yorumlayıcı kilidi nedeniyle saf Python kodunda iş parçacıkları aynı anda tek çekirdeği kullanır. G/Ç beklemesi baskın işlerde yine fayda sağlar. Yoğun hesaplamada çoklu süreç ya da başka yaklaşımlar tercih edilir. Güncel davranış için dilin resmî belgelerine bakmak gerekir.

Process ve Thread Farkı Nedir? Süreç ve İş Parçacığı