Öncelikler görev yöneticisinde nasıl çalışır ve bunu ne zaman / ne yapmamalıyım?


30

Ne olduğunu görmek için bazı süreçler önceliği belirledim, fakat tahmin et ne oldu ... Hiçbir şey; hepsi aynı şekilde çalışır ...

Google’da önceliklerin işlem hızıyla gerçekten bağlantılı olmadığını tespit ettim, doğru mu? Neden olmasın o zaman Bir işlem en yüksek önceliğe sahipse, daha hızlı gitmemeli mi?


4
Kısa cevap: When should I set [priorities in Task Manager]? Neredeyse asla.
Dan Henderson,

2
Anlaşılması gereken bir diğer önemli husus, önceliklerin uygulanmasının sistemin yapabileceği toplam işi azaltmasıdır. Bu nedenle yaygın masaüstü işletim sistemleri gerçek zamanlı işletim sistemleri değildir. Gerçek zamanlı işletim sistemleri gibi davranmalarını sağladıkça daha az verimli olurlar. Kesintiler, örneğin, önbellekleri patlatır. Düşük öncelikli çalışma hala yapılmalı ve hala G / Ç için yarışmalıdır. Daha az verimli, daha küçük parçalarda yapmak, kimseye fayda sağlamaz.
David Schwartz

Bilgisayarınız için düşünmeye çalışmayın. Kazanmayacaksın. İpliklerini senden çok daha iyi idare etmeyi biliyor.
b1nary.atr0phy

Yanıtlar:


52

Market için "hattın başına git" kartınız olduğunu varsayalım. Dükkana gidersin, alışveriş sepetini doldur, kasaları doldur ve sıradaki kimseyi bulamazsın. Kartınız daha hızlı kontrol edilmenize yardımcı oluyor mu? Hayır!

Öncelikler işlem hızını etkilemez, çünkü daha yüksek öncelikli bir işlem daha hızlı çalışamaz ve hatta daha fazla CPU zamanı kullanamaz ... İşlemciyi kullanmak isteyen tek şey değilse.

Bu konuda gerçekten konuşmak için, konulara değinmemiz gerekiyor. İşlemler, Windows'ta "çalıştırılmaz". Süreçlerin bir parçası olan iş parçacıkları. (Bir işlem sadece bir iş parçacığına sahip olsa da, ayrım dışarıdan oldukça bulanık.)

(Bu arada: Bir CPU'nun örneğin "dört çekirdekli ve sekiz iş parçacığına" sahip olduğu pazarlama terminolojisi yanıltıcıdır. İşlemcilerin çekirdeği vardır, ancak işlemcilerin iş parçacıkları "değildir". İşlemlerin parçaları. İşlemci çekirdeği Hyperthreading etkin olmadan bir iş parçacığı çalıştırabilir , Hyperthreading etkin olduğunda bir çekirdek iki iş parçacığı çalıştırabilir . Ancak CPU'larda "iş parçacığı" yoktur.)

Her iş parçacığı her zaman birkaç zamanlama durumundan birinde bulunur. En sık görülen durumlar şunlardır: Bekliyor (* nix bunu "bloke eder" olarak adlandırır; her iki işletim sisteminde de bu, G / Ç'yi veya benzerini beklemek anlamına gelir, CPU zamanı kullanmaz ve istemez); Hazır (CPU zamanını kullanmak istiyor, ancak şu anda işlemci yok); ve koşma . Yalnızca Çalışan iş parçacıkları CPU süresini tüketir; yani eğer bir işlemin Çalışan iş parçacığı yoksa, Görev Yöneticisi gibi araçlarda% 0 CPU zamanı kullandığı görülecektir.

Bir iş parçacığı bir seferde yalnızca bir çekirdeğin üzerinde çalışabilir (veya hiper iş parçacığı etkinleştirilmişse, "mantıksal işlemci"), bu nedenle bir işlem yalnızca şu anda çalıştırmak isteyen iş parçacıklarına sahip olduğu kadar CPU çekirdeği (veya LP) kullanabilir. . (Aynı ifade bir bütün olarak sistemden yapılabilir.)

Çoğu sistemdeki çoğu konu, zamanlarının çoğunu Bekle durumunda geçirir. (Bu nedenle, sisteminiz hiçbir şey yapmıyorken boşta kalma işleminizin CPU zamanının% 95'inden fazlasını alması gerekir.) İstisnalar, video veya 3d render, oyun vb. CPU'nun% 100'ünü gerçekten kullanabiliyorlardı, çünkü genellikle bir yerden okumak zorunda oldukları bazı girdi verileri üzerinde çalışmak zorunda kalıyorlar ve genellikle bir yere yazılması gereken çıktı verilerini yaratıyorlardı. Ve zaman içinde bellekteki birçok farklı verilere atıfta bulunabilirler; bu da zor sayfa hatalarının giderilmesi için beklemeleri gerektiği anlamına gelebilir.

Ancak, video oluşturma veya 3D görüntü oluşturma gibi bir şey yapan iş parçacıkları, işlemlerinin neredeyse tümünü CPU'da "hesaplama" yaparak geçirebilir ve G / Ç için çok az bekleyiş yapabilir. Bu tür dişlere genellikle "hesaplamaya bağlı" denir, bu da genel performanslarının öncelikle CPU hızı ile sınırlı olduğu anlamına gelir.

Görev Yöneticisi'nde yaptığınız ayar aslında işlemdeki tüm iş parçacıkları için "temel öncelik" oluşturur. İpin gerçek veya "akım" önceliği daha yüksek olabilir (ancak asla tabandan daha düşük değildir). Bir dakika içinde daha fazlası. Çizelgeleme kararları ("kim çalışır ve hangi CPU'da çalışır") iş parçacığının mevcut önceliği kullanılarak her zaman yapılır. Öncelik yalnızca Hazır ve Çalışan iş parçacıkları için anlamlıdır (veya başka bir deyişle, öncelik Bekleyen iş parçacıkları için anlamlı değildir ).

Windows önleyici bir zamanlama algoritması kullanır . Sistemdeki sadece bir iş parçacığı CPU süresini kullanmak istiyorsa, önceliğinin ne olduğu en ufak bir sorun değil; CPU'nun% 100'ünü alır. Zamanlayıcı, düşük öncelikli bir iş parçacığı çalışırken, sadece yüksek öncelikli bir şey ortaya çıktığında CPU'nun kabiliyetinin bir bölümünü “geri tutuyor” gibi değildir.

İki iş parçacığı bir CPU kullanmak istiyorsa ve aynı önceliğe sahiplerse, o zaman "zaman dilimleme" adı verilen bir zamanlama ile programlanırlar ve zaman içinde her biri CPU zamanının yaklaşık% 50'sini alır. Oysa farklı önceliklere sahiplerse, daha yüksek öncelikli iplik% 100 ve daha düşük hiçbir şey almaz .

(Uygulamada hiçbir şey elde edemez, çünkü periyodik bir "açlıktan kaçınma önceliği artışı" yaşayacaktır, çünkü her 4 veya 5 saniyede bir birkaç on msn sürebilir. kazanır "çünkü açlıktaki ipliğin önceliğini ayarlayarak yapılır.)

Birden fazla CPU çekirdeğiniz varsa, işler daha da ilginçleşir ve genel olarak öncelikler daha az etkili olur. Çalıştırmak istediğiniz iki iş parçacığınız olduğunu varsayalım. Ve varsayalım ki bu iş parçacıklarından eşit ya da daha yüksek önceliğe sahip bir şey yapmayan iki ya da daha fazla CPU çekirdeğiniz var. O zaman iki dişiniz kendi öncelikleri ne olursa olsun bir çekirdeğin% 100'ünü alır .

(İki kişi süpermarkette belirir ve iki tane ücretsiz dama vardır. Müşterilerden birinin "hattın başına git" kartı vardır. Önemli değil.)

tl; dr version (şimdiye kadar): Öncelikler “kim CPU zamanının ne kadarını alıyor” ile ilgili değil, “ilk önce kim koşacak” ile ilgilidir.

Burada, Windows'un iki "mantıksal işlemcinin" her birine bir çekirdekte işlemesi, HT'nin kapatılması durumunda bir çekirdeği işlemesiyle aynı şekilde ele alması haricinde, burada çok fazla ilerleme göstermeyeceğim. yani, bu istisna dışında "gerçek" CPU'lar olarak kabul edilirler: Windows bir çekirdekte bir seferde birden fazla LP kullanmamak için çok çalışacaktır. yani, normalde her iki LP'yi de aynı anda çalıştırmaya çalışan çekirdek sayılardan daha fazlasına sahip olana kadar kullanılan bir çekirdekte görmeye başlamazsınız . Bunun nedeni, iki "mantıksal işlemcinin" size tek bir hiper iş parçacıklı olmayan çekirdeğin performansını iki katına çıkaracak bir şey vermemesidir.

"Temel öncelik" hakkında: Windows, son zamanlarda yaptıklarına göre, iş parçacığının geçerli önceliğini ayarlayacaktır ("artır" ve "çürüm"). Yakın zamanda tamamlanan G / Ç işlemlerini tamamlayan konular normal olarak tabanın üzerinde bir çentik veya iki olacaktır; UI dizileri (bir pencereyi çalıştıran diziler) genellikle oldukça yüksek olacaktır; CPU'ya bağlı yivler genellikle tabanlarında olacaktır. Bunun amacı, programın kullanıcı arayüzünde yanıt vermeyi sürdürmek ve aynı zamanda GÇ taleplerinin disk gibi şeylere akmasını sağlamaktır.

Bir program (süreç), aynı zamanda her bir iş parçacığının temel önceliğini de, işlem önceliğinin belirlediği bir aralıkta (Görev Yöneticisi'nde belirlediğiniz) değiştirebilir. Ancak programların büyük çoğunluğu rahatsız etmiyor. (Daha fazlası gerekir.)

Devam eden başka şeyler var. Öncelikli artırma / bozulma nedeniyle ve çok işlemli sistemler (çok çekirdekli veya yüksek iş parçacıklı ya da her ikisi de) bu günlerde çok yaygın olduğundan ve Windows'ta arka planda sürekli çalışan şeyler olduğu için (ancak, çok fazla CPU zamanı kullanmamayı umuyoruz), ve hem sert hem de yumuşak "afinite" nin etkileri nedeniyle, test durumlarını çalıştırmak ve burada öngörülebilecek kesin sonuçları elde etmek zordur. Ancak bu size doğru bir resme yaklaşmanızı sağlamalıdır.

Sonuç olarak...

Çoğu şeyi "Normal" olarak bırakmak mantıklıdır. Bunu yapmazsanız, işletim sisteminin disk önbelleği temizleme işlevleri gibi, gerçekten çalışmak isteyeceğiniz bir şeye kolayca açabilirsiniz (var olduğunu bilmeseniz bile). Gerçekten de, işletim sisteminin süreçlerinin çoğu Normal dışında olacaktır ve Windows bunları koydukları her yere bırakılmalıdır.

Öncelikleri aşmak için Görev Yöneticisi'ni kullanmak için makul bir durum, bazı CPU-hogging görevleriniz varsa (video veya 3D render gibi) ve çalışırken sistemi kullanmanızın yavaşlamasıdır. Doğru olan, önceliğini bir ya da iki derece azaltmak için inan veya inanma . Mutlaka başka hiçbir şey istemeyen tüm CPU döngülerini kullanır, ancak sistemi etkileşimli kullanım şeklinizden uzak tutar. İşini bitirmesi biraz zaman alabilir, ancak işlerini diğer programları etkileşimli kullanımınıza en az şekilde müdahale ederek yapacaktır. Bu tradeoff'u sevmiyorsan, yapma! Ancak "daha hızlı ilerletme" çabasıyla yüksek önceliğe ayarlayın ve tüm kullanıcı arayüzünüzü tamamlayana kadar askıda kalabilir.

Asla Realtime öncelik sınıfına bir şey ayarlamayın.

(Düzen - bu paragraf eklendi) Tamam, bu aşırı bir ifade. (“Hiçbir evrensel iddia doğru değildir - bunu hariç tutmuyorum.”) En azından, çok dikkatli bir şekilde düşünmeden değil. Amacınız bir şeyin daha hızlı çalışmasını sağlamaksa, muhtemelen yardımcı olmaz. Ancak sisteminizi "sert bir şekilde kilitleyebilir" (sıfırlama veya modern makinelerin çoğunda güç döngüsü gerektirir). Ya da çok kilitli olabileceği kadar tepkisiz hale getirin.

nb: Herhangi bir video oynatıcı uygulaması, Vista ve sonraki sürümlerde "Multimedya sınıfı zamanlama" özelliğini seçmelidir. Bu otomatik olarak nispeten kısa aralıklarla hesaba katılmış bir CPU'nun% 80'ine kadar vermesini sağlar. Aksi takdirde oynatma işlemi bulamazsanız, bir şeyler çok yanlış olur.

Daha fazla ayrıntı için, Windows Internals 6th Edition'ın Solomon, Russinovich ve Ionescu tarafından yayımlanan konu başlıkları ve çizelgeleme bölümlerine bakınız .

Ayrıca , süreç ve iş parçacığı önceliklerini nasıl belirlediğiniz ve Görev Yöneticisi'ndeki "Öncelikli" sütununun anlamı hakkında bilgi için buradaki cevaba bakın .


1
Bu arada, aşağıdaki bağlantılı soruya cevabım şudur: superuser.com/questions/949030/…
Jamie Hanrahan 29:15

1
Aynı zamanda: "Çizelgeleme", "Çizelgeleyici", vb. Burada, hangi iş parçacıklarının çalışacağına ve hangi işlemcilerin üzerinde çalışması gerektiğine karar veren Windows çekirdek yordamlarına bakın. Belirli görevlerde veya çeşitli tetikleyicilere cevap olarak süreçlerin başlatılması ile ilgili olan “görev çizelgeleme” değil.
Jamie Hanrahan

@JamieHanrahan ok Buraya taşındım: superuser.com/questions/1380473/…
Julien__

5

Öncelikleri değiştirmek, işletim sisteminin CPU zamanını çalışan uygulamalara ayırma biçimini değiştirir. Yalnızca genel CPU kullanımı yüksekse, gözle görülür etkiler yaratır.

Örneğin, bir videoyu kodlar ve aynı anda farklı bir video izlersiniz. Muhtemelen, kodlama uygulaması tüm CPU çekirdeğinizde% 100 bilgi işlem gücü kullanacaktır. Sonuç olarak, diğer uygulamalar kekeme olabilir.

Windows varsayılan olarak her iki uygulamaya da eşit "normal" öncelik verecektir. Bu noktada, film oynatıcı yazılımınızın önceliğini yükseltmek isteyebilirsiniz. Bu şekilde daha yavaş bir video kodlaması pahasına sorunsuz bir video oynatımı elde edersiniz, çünkü kodlama yazılımı video oynatıcıya kıyasla arka plan işlemine indirgenir.


"Büyük olasılıkla, kodlama uygulaması tüm CPU çekirdekleri üzerinde% 100 bilgi işlem gücünü kullanacak." Yani en azından varsa sadece mümkün sayı-of-çekirdek konuları kodlayan.
Jamie Hanrahan
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.