Kendiniz söylediğiniz gibi, Hkullanıcı konularını göstermek için vurabilirsiniz .
Sadece ileride başvurmak için (ve eğlence için), CPU kullanımını hesaplayalım!
Biraz arka plan:
Modern bir işletim sisteminde bir Zamanlayıcı vardır. Tüm Süreçlerin ve iş parçacıklarının hesaplama süresinde adil bir pay almasını sağlamayı amaçlamaktadır. Çok fazla zamanlamaya girmeyeceğim (gerçekten karmaşık). Ama sonunda çalışma kuyruğu denilen bir şey var . Bu, tüm işlemlerin tüm talimatlarının, sıralarının yürütülmesini beklemek için sıralandığı yerdir.
Herhangi bir işlem, onun "görevlerini" çalışma kuyruğuna koyar ve işlemci hazır olduğunda, onları çıkarır ve yürütür. Örneğin bir program uyku durumuna geçtiğinde, kendini çalışma kuyruğundan kaldırır ve tekrar çalışmaya hazır olduğunda "satırın sonuna" döner.
Bu kuyruğa göre sıralama, işlemlerin Önceliği ile ilgilidir ("iyi değer" olarak da adlandırılır - yani, sistem kaynakları hakkında iyi bir işlemdir ).
Sıra uzunluğu belirleyen Yükü sistemi. Örneğin 2.5 yükü, CPU'nun gerçek zamanlı olarak başa çıkabileceği her talimat için 2.5 talimat olduğu anlamına gelir .
Bu arada, Linux'ta bu yük 10ms aralıklarla hesaplanır (varsayılan olarak).
Şimdi CPU kullanımının Yüzde değerlerine bakalım:
İki saatinizt
olduğunu düşünün, biri denir ve gerçek zamanı temsil eder . Her saniye için bir saniye ölçer. Dediğimiz diğer saat c
. Yalnızca yapılacak işlem varsa çalışır. Bu, yalnızca bir işlem bir şey hesapladığında saatin çalıştığı anlamına gelir. Buna CPU zamanı da denir. Sistemdeki her süreç bunlardan birini 'elde etti'.
İşlemci kullanımı artık tek bir işlem için hesaplanabilir:
veya tüm işlemler için:
Çok çekirdekli bir makinede, bu elbette 3,9 değerine neden olabilir, çünkü CPU mükemmel kullanılırsa her saniye dört saniye değerinde hesaplama hesaplayabilir.
Wikipedia bu örneği sağlar:
6-CPU UNIX makinesinde çalışan bir yazılım uygulaması, kullanıcı gereksinimlerini karşılamak için üç UNIX işlemi oluşturur. Bu üç işlemin her biri iki iş parçacığı oluşturur. Yazılım uygulamasının çalışması, uygulama için oluşturulan 6 bağımsız yürütme iş parçacığına eşit olarak dağıtılır. Kaynaklar için herhangi bir bekleme söz konusu değilse, Toplam CPU süresinin Geçen gerçek zamanın altı katı olması beklenir.
İşte bunu yapan küçük bir python snippet'i
>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %
Mükemmel bir dünyada, sistem yükünün 100 - 66.93 =% 33,1 olduğunu çıkarabilirsiniz. (Ama gerçekte bu, G / Ç beklemesi, zamanlama verimsizlikleri ve benzeri gibi karmaşık şeyler nedeniyle yanlış olurdu)
Yükün aksine , bu hesaplamalar her zaman 0 ile işlemci sayısı arasında, yani% 0 ile 1 veya% 0 ile 100 arasında bir değer ile sonuçlanır. Artık% 100 işlemci kullanan,% 100 işlemci kullanan bir makine ile bir milyon görevi çalıştıran bir makine arasında,% 100 gibi herhangi bir işte neredeyse hiç iş yapmadan ayrım yapmanın bir yolu yok. Örneğin, birçok bilgisayarda birçok işlemi dengelemeye çalışıyorsanız, cpu kullanımı işe yaramaz. Yük orada istediğiniz şeydir.
Şimdi gerçekte, bu işlem sürelerinden birden fazla var. Örneğin G / Ç'de bekleyen bir tane var. Böylece G / Ç kaynak kullanımını da hesaplayabilirsiniz.
Bu, orijinal soru ile ilgili yardımcı olmayabilir, ancak umarım ilginçtir. :)