Bir çatal ve bir iplik arasındaki farkı açıklayan var mı?
Bir çatal ve bir iplik arasındaki farkı açıklayan var mı?
Yanıtlar:
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 .
Ç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:
İ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:
Daha fazla ayrıntı burada bulunabilir .
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.
İş 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.