Ben aşağıdaki gibi basit bir tek iş parçacıklı süreci çalıştırmak Say:Tek bir iş parçacığı süreci neden birkaç işlemci/çekirdek üzerinde yürütülür?
public class SirCountALot {
public static void main(String[] args) {
int count = 0;
while (true) {
count++;
}
}
}
(yani Aşina olduğum ne çünkü Bu Java, ama bu gerçekten önemli değil şüpheli)
Bir i7 işlemcim var (4 çekirdek veya 8 sayım hiper iş parçacığı) ve Windows 7 64-bit çalıştırıyorum, böylece CPU kullanımını izlemek için Sysinternals Process Explorer'ı çalıştırdım ve beklediğim gibi yaklaşık% 20 kullanıyordum. tüm mevcut CPU.
Ama CPU başına 1 grafik göstermek için seçenek geçiş, ben 4 "çekirdek" yerine 1 her göbeklere, CPU kullanımı yayılır kullanılan görüyoruz:
Bunun yerine beklediğim 1 çekirdeğin dışarı çıkmasıdır, ancak bu yalnızca işlem için yakınlığı tek bir çekirdeğe ayarladığımda olur.
Neden iş yükü ayrı çekirdek bölünmüştür? İş yükünü birkaç çekirdeğe ayırıp, önbelleğe almayı veya diğer performans cezalarını ihlal etmeyecek misiniz?Tek çekirdeğin aşırı ısınmasını önlemek için basit nedenlerden biri mi? Yoksa daha derin bir neden var mı?
Düzenleme: İşletim sisteminin programlamadan sorumlu olduğunu biliyorum, ancak neden "rahatsız edici" olduğunu bilmek istiyorum. Elbette saf bir bakış açısından, (çoğunlukla *) tek iş parçacıklı işlem 1 çekirdeğe yapıştırarak daha basit & gitmek için daha verimli bir yoldur?
* Çoğunlukla tek iş parçacıklı burada birden theads var, çünkü söylemek, ancak bunlardan sadece 2 şey yapıyoruz:
Küçük nitpick (pratikte sık sık uygulamayı zaten kendisi iyileştirilmesi/basitçe ayarlama ile daha iyi iyileştirmeler göreceksiniz özellikle gibi) bu çok zor mücadele etmeye çalışmaktan karşı bir argüman olabilir; Bunun tek bir iş parçacığı süreci olduğunu söylemesi doğru olmaz. JVM, final düzenleyiciler, çöp toplayıcıları, vb. Gibi temizlik amacıyla birden fazla iş parçacığı içeriyor. Her bir iş parçacığı tarafından yapılan gerçek işlerin elde edilmesi için, JVM iş parçacıklarının gerçek h/w iş parçacıklarına eşleştirilmesi oldukça olasıdır. –
Sanırım Caspar, _non-daemon_ iş parçacığı anlamına geliyordu. – Santosh
@ SanjayT.Sharma Evet, biraz basitleştirdim ve muhtemelen yönetilmeyen bir dilde örnek bir program vermeliydim;) Ancak, dediğim gibi, JVM'nin bunu yapıp yapmadığını şüpheliyim (ve eğer haritalanıyorsa) JVM -> HW konuları ve bu sorumludur, neden haritalama sürekli değişiyor?) – Caspar