Çatal ve dişli arasındaki fark nedir?


Yanıtlar:


99

Bir çatal size aynı kod segmentlerine sahip mevcut sürecin bir kopyası olan yepyeni bir süreç sunar. Bellek görüntüsü değiştikçe (tipik olarak bu, iki işlemin farklı davranışından kaynaklanır), bellek görüntülerinde bir ayrım elde edersiniz (Yazarken Kopyala), ancak çalıştırılabilir kod aynı kalır. Görevler, bazı İşlemler Arası İletişim (IPC) kullanmadıkça belleği paylaşmaz ilkelini .

Bir işlem, her biri işlemin aynı bağlamı içinde paralel olarak yürütülen birden çok iş parçacığına sahip olabilir. Bellek ve diğer kaynaklar iş parçacıkları arasında paylaşılır, bu nedenle paylaşılan verilere veri bozulmasını önlemenizi sağlayan bazı ilkel ve eşitleme nesneleri ( muteksler , koşul değişkenleri ve semaforlar gibi ) aracılığıyla erişilmesi gerekir .


3
Muhtemelen "mevcut sürecin kopyasına" alt süreç olarak atıfta bulunmak istersiniz.

1
Bununla birlikte, metin bölümü genellikle paylaşılır (sanal olarak) ve hatta veri bölümü yazılırken kopyalanabilir.
Jé Queue


80

Çatal

Çatal, tamamen eski veya üst süreç gibi görünen yeni bir işlemden başka bir şey değildir, ancak yine de farklı işlem kimliği ve kendi belleğine sahip farklı bir süreçtir. Üst süreç, çocuk için ayrı bir adres alanı oluşturur. Hem üst hem de alt süreç aynı kod parçasına sahiptir, ancak birbirinden bağımsız olarak yürütülür.

Çatallamanın en basit örneği, Unix / Linux'ta kabuk üzerinde bir komut çalıştırmanızdır. Bir kullanıcı her komut verdiğinde, kabuk bir alt süreci çatallar ve görev tamamlanır.

Bir çatal sistem çağrısı yayınlandığında, ana sürece karşılık gelen tüm sayfaların bir kopyası oluşturulur, işletim sistemi tarafından alt süreç için ayrı bir bellek konumuna yüklenir, ancak bazı durumlarda bu gerekli değildir. 'Exec' sistem çağrılarında olduğu gibi, execv üst sürecin kendi adres alanını değiştirdiğinden, üst süreç sayfalarını kopyalamaya gerek yoktur.

Çatallama hakkında dikkat edilmesi gereken birkaç nokta şunlardır:

  • Alt süreç kendi benzersiz süreç kimliğine sahip olacaktır.
  • Alt süreç, ebeveynin dosya tanımlayıcısının kendi kopyasına sahip olacaktır.
  • Üst süreç tarafından ayarlanan dosya kilitleri çocuk süreç tarafından miras alınmayacaktır.
  • Üst süreçte açık olan herhangi bir semafor, alt süreçte de açık olacaktır.
  • Alt süreç, ebeveynin mesaj kuyruğu tanımlayıcılarının kendi kopyasına sahip olacaktır.
  • Çocuğun kendi adres alanı ve hafızası olacaktır.

İş Parçacığı

İplikler Hafif İşlemlerdir (LWP'ler). Geleneksel olarak, bir iş parçacığı, geri kalanını (veri, yığın, G / Ç, sinyaller) içeren işlemle yalnızca bir CPU (ve başka bir minimum durum) durumudur. Sistem, işlem için yeni bir sistem sanal bellek alanını ve ortamını başlatmadığından, iş parçacıkları "çatallanma" ya da yeni bir işlem üretmekten daha az ek yük gerektirir. Süreç akışının başka bir işlemcide çalışacak şekilde programlanabildiği ve böylece paralel veya dağıtılmış işlemlerle hız kazandığı çok işlemcili bir sistemde en etkili olsa da, G / Ç'deki gecikmeyi kullanan tek işlemcili sistemlerde ve işlemi durdurabilecek diğer sistem işlevlerinde de kazançlar bulunur. yürütme.

Aynı süreçteki konular paylaşılır:

  • işlem talimatları
  • çoğu veri
  • dosyaları aç (tanımlayıcılar)
  • sinyaller ve sinyal işleyiciler
  • mevcut çalışma dizini
  • kullanıcı ve grup kimliği

Daha fazla ayrıntı burada bulunabilir .


2
Bir işlemin birkaç iş parçacığı olabilir. Bir süreçteki evrelerden biri fork çağırırsa, çatallı işlemin tamamen yinelenen bir belleği var mı, ancak yeni süreçte yalnızca çağıran evre mi?
Michael


31

Dacav'ın cevabı mükemmel, sadece tüm iş parçacığı modellerinin size gerçek çoklu işlem vermediğini eklemek istedim.

Örneğin, Ruby'nin varsayılan iş parçacığı uygulaması gerçek işletim sistemi / çekirdek evrelerini kullanmaz. Bunun yerine, tek bir çekirdek iş parçacığı / süreci içindeki Thread nesneleri arasında geçiş yaparak birden çok iş parçacığına sahip olmayı taklit eder.

Bu, çok işlemcili / çok çekirdekli sistemlerde önemlidir, çünkü bu tür hafif iş parçacıkları yalnızca tek bir çekirdek üzerinde çalışabilir - birden çok iş parçacığına sahip olmaktan performans artışı elde edemezsiniz.

Bunun bir fark yarattığı diğer yer, bir iş parçacığının (G / Ç'yi beklemesi veya bir sürücünün IOCTL'sini çağırması) tüm Threads bloğunu bloke etmesidir.

Bu, günümüzde çok yaygın değildir - çoğu iş parçacığı uygulaması, bu sorunlardan muzdarip olmayan çekirdek iş parçacıkları kullanır - ancak tamlıktan bahsetmeye değer.

Buna karşılık, fork size orijinal işlem yürütülürken aynı anda başka bir fiziksel CPU üzerinde çalıştırılabilen başka bir işlem sunar. Bazı insanlar IPC'yi uygulamaları için daha uygun bulurken, diğerleri iş parçacığı oluşturmayı tercih ediyor.

İyi şanslar ve iyi eğlenceler! Çoklu iş parçacığı hem zorlayıcı hem de ödüllendirici.


8
Sinire

5

İş parçacığı paralel çalışan işlevlerdir, fork ise ebeveyn mirasıyla yeni bir süreçtir. Dişler bir görevi paralel olarak yürütmek için iyidir, çatallar da aynı anda çalışan bağımsız bir süreçtir. Dişlerin yarış koşulları vardır ve orada semaforları ve kilitleri veya muteksleri kontrol eder, borular hem çatal hem de dişte kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.