İşlemlere öncelik vermek neden hız artışı sağlamaz?


18

Her ikisi de çok fazla sistem kaynağı kullanan 2 uygulamam var. Görev Yöneticisi'nde birinin önceliğini düşürdüğümde diğerini artırdığımda, daha yüksek önceliğe sahip uygulamada hızda önemli bir gelişme görmüyorum.

Bu neden? Daha fazla var mı yoksa yapılması gereken daha var mı?


6
Gerçek hayat gibi. Uçağa binmek için önceliğiniz varsa, bu sizin için uçuşun daha az zaman alacağı anlamına gelmez!
Mehrdad

Yanıtlar:


28

Darboğaz CPU'nun kendisi olduğunda öncelik yardımcı olmaz. Aslında öncelik , İşletim Sisteminin hangi işlemin çalışacağını belirlemek için kullandığı programlama algoritmasını etkiler, çünkü çoğu sistemde her işlemi sürekli olarak çalıştırmak için yeterli işlemci yoktur.

Daha yüksek öncelikli bir görev kuyruğun tepesine daha hızlı geçecektir, bu da genel gecikmeye yardımcı olur, ancak işleminiz tüm zaman dilimini tüketiyorsa, gerçek hesaplamada tahsis edilirse, zamanlama orada hiçbir şey değiştirmeyecektir. G / Ç'de bekleyen bir işleminiz olduğunda ve daha duyarlı olmasını istediğinizde önceliği değiştirmek daha yararlıdır.


5
Darboğaz çalıştırılabilecek çok fazla iş parçacığı olduğunda öncelik yardımcı olur. Zaman diliminin sonunda çalıştırılabilir durumda kalan Windows'ta daha yüksek öncelikli iş parçacıkları, daha düşük öncelikli bir iş parçacığına tercih etmek için başka bir şans daha elde eder (Windows düşük öncelikli iş parçacıklarını aç bırakmaya çalışır ve bazen bunları artırır). Önceliğin G / Ç'yi bekleyen iş parçacıkları üzerinde çok az etkisi vardır - Windows, beklediği G / Ç türüne bağlı olarak, G / Ç tamamlandıktan sonra iş parçacığının önceliğini geçici olarak artırır.
Mike Dimmick

4

Öncelik CPU zamanıdır. Tüm çekirdekler her zaman% 100 kullanılıyor mu? Değilse, önceliğin bir etkisi olmaz. Sıklıkla CPU darboğaz değildir ve bellek, disk veya GPU kaynaklarıdır.


3

Öncelik yalnızca kullanılabilir CPU çekirdeklerinden daha fazla çalıştırılabilir iş parçacığı olduğunda önemlidir. Bu olduğunda, öncelik hangi iş parçacıklarının çalıştırılacağını denetler. Çoğu sistemde, CPU üzerinde herhangi bir çekişme için yeterli hesaplama yoktur: iş parçacıklarının tümü engellenir ve bir şey olmasını bekler. Bu, bir şeyler yazmanızı, fareyi hareket ettirmenizi, ekrana dokunmanızı veya diskten, ağdan, taktığınız diğer bazı cihazlardan veya kritik bir veri üzerinde çalışmayı bitirmek için başka bir iş parçacığının gelmesini bekliyor olabilir. yapısı. Programın bir kısmının, bir dosyayı açıkça okumak yerine, diskten okunmasını veya geri okunması için değiştirilen bir hafızayı beklemiş olabilir.

Windows'ta, zamanlayıcı her öncelik düzeyinde bir çalıştırılabilir iş parçacığı kuyruğu tutar . Bir zamanlama kararı verdiğinde - bir iş parçacığının kuantumunu tükettiği (başka bir şeyin çalışması gerekmeden önce izin verilen süre), başka bir iş parçacığının dönüş alması veya iş parçacığının bloke olduğu ve artık çalıştırılamadığı veya daha yüksek önceliğe sahip olduğu anlamına gelir iş parçacığının engeli kaldırıldı - çalıştırılabilir iş parçacıklarıyla birlikte sıradaki en yüksek öncelik düzeyindeki bir sonraki iş parçacığı zamanlanacaktır. Çalışan iş parçacığı kuantumunu tüketmişse, kuyruğun sonuna konur. Öncelik düzeyinde çalıştırılabilir olan tek iş parçacığıysa ve daha yüksek önceliğe sahip başka çalıştırılabilir, ancak çalışmayan iş parçacıkları yoksa, başka bir dönüş alır.

Çok çekirdekli / çok işlemcili sistemlerde, bir iş parçacığının hangi çekirdeklerde çalışabileceği konusunda kısıtlamalar olabilir. Ayrıca, sistem iş parçacıklarını ideal çekirdeğinde ve NUMA düğümünde tutmaya çalışır, böylece iş parçacığının verilerinin hala bu çekirdeğin önbelleğinde olması ve oluşturduğu verilere hızlı erişimi olur. Daha sonra ne çalıştırılacağına dair bir seçenek yoksa, konular ideal olmayan çekirdeklerde de çalıştırılır.

Sistem, çeşitli dinamik öncelik artışlarını ve dinamik kuantum boyutlarını kullanır, böylece ön plan uygulaması arka plan işlemlerinden daha fazla zaman alır (gerekiyorsa) ve böylece G / Ç işlemleri tamamlandığında (fare, klavye ve dokunmatik ekran girişi). Buna ek olarak, yüksek öncelikli bir iş parçacığının, şu anda düşük öncelikli bir iş parçacığının beklediği bir kaynağı beklediği öncelikli ters çevirmelerden kurtulmak için öncelik artırma kullanılır. Orta öncelikli bir iş parçacığı da çalışıyorsa, yüksek öncelikli iş parçacığını tutarak düşük öncelikli işlemci zamanı iş parçacığını aç bırakacaktır. Bu nedenle, düşük öncelikli iş parçacığı geçici olarak yüksek önceliğe yükseltilir, böylece zaman alır ve umarım yüksek öncelikli iş parçacığının ihtiyaç duyduğu kaynağı serbest bırakır.

Windows Vista'dan önce, iş parçacığı önceliğinin G / Ç işlemlerinin ne kadar hızlı tamamlandığı üzerinde bir etkisi yoktu . Windows Vista'dan beri, G / Ç'ler de varsayılan olarak iş parçacığı önceliğinden gelen bir önceliğe sahip olabilir.

Özet: CPU'nuz çok fazla yüklenmedikçe, iplik önceliklerini değiştirmenin herhangi bir etkisini görmezsiniz ve o zaman bile etki genellikle minimum olur. İşlemin G / Ç'yi beklemesi gerekiyorsa veya CPU zamanı için diğer işlemlerle çelişmiyorsa, zaten mümkün olan en hızlı şekilde çalışıyor ve önceliğin değiştirilmesi bunu daha hızlı hale getirmeyecek.


0

Genel olarak, bir programın birden fazla CPU kullanması ekstra çaba gerektirir (çoklu iş parçacığı ekleyerek). Bu nedenle, program kullanılabilir en yüksek önceliğe sahip olsa bile, yalnızca bir çekirdek kullanıyor olabilir.

Diğer olası konular:

  • Program verimsiz / kötü yazılmış olabilir
  • "Yavaş" disk erişimi veya yavaş bir ağ nedeniyle yavaşlatılabilir

0

G / Ç'ye bağlı bir işlemin G / Ç önceliğini artırmak bile, daha hızlı çalışmasına neden olmaz. Örneğin, ayrı, muhtemelen uzak bir işlem tarafından üretilen bir veri tüketicisiyse ve bu kaynağın verileri üretme hızına uyuyorsa, daha hızlı gidemez veya daha yüksek bir verime sahip olamaz.

Şu anda kabul edilen cevabın ilk cümlesinde kategorik olarak belirtilenlerin aksine ( /superuser//a/752587/322588 ), öncelik değişiklikleri, Mike Dimmick'in cevabında açıklandığı gibi, CPU darboğazdayken en etkili ( /superuser//a/752864/322588 ). Ayrıca, kabul edilen yanıtın ikinci paragrafındaki ifade, "işleminiz gerçek hesaplamada tahsis edilen tüm zaman dilimini tüketiyorsa, o zaman zamanlama genel olarak en yüksek önceliğe sahip olmadıkça, zamanlama orada hiçbir şeyi değiştirmeyecektir" tamamen yanlıştır. runnable parçacığı çalışmayı beklediğinde. Bunun nedeni, diğer tüm durumlarda, önceliğin artırılmasının duvar saati aralığı başına daha fazla zaman dilimine sahip olması muhtemel olmasıdır.

Mike Dimmick, birkaç gün önce bu cevapla ilgili problemlere dikkat çekti ve çok daha iyi bir cevap verdi, ancak ilk açıklanamayan oylar almaya devam ediyor. Yazarının, bize aptallar için cevabını sadece aşağı çektiği iddiası mantıklı değil, çünkü sadece basit veya basit değil, en azından CPU'ya bağlı süreçlerle ilgili olarak yanlış görünüyor.

Feragatname: Bay Dimmick'i tanımıyorum, ancak ne hakkında yazdığını bildiğini söyleyebilirim.


Belki de yanlış anladınız; soru daha hızlı çalışan süreçlerle ilgiliydi . CPU-bağlı süreçler tüm zamanlama birimlerini (kuantum) tüketecek ve daha sonra sonunda bir hazır süreç kuyruğuna gidecektir. Windows gibi bir masaüstü işletim sisteminde, bu işlemin saniyede 1 / kuantum-Hz şansı olduğu anlamına gelir. Önceliği değiştirmek (genellikle), zaman dilimlerinin uzunluğunu değiştirmez. Tamamlanması her zaman aynı sayıda zaman planlaması gerektirir. Önemli bir şekilde , Windows aslında işlem çalışma zamanını bu şekilde ölçer: planlanan quanta sayısı.
Andon M. Coleman

Süreç olabilir bitirmek er, ama yine de koştu zamanlama birimlerinin aynı sayıda. Bir G / Ç'ye bağlı işlem kendisini bekleme listesine koyduğunda, G / Ç işlemi tamamlanmadan kuantumunun süresi dolmadan önce daha düşük önceliğe sahip çalışan bir işlemi çalıştırmak ve önceden almak için ikinci bir şans olabilir. CPU bağlantılı süreçler bu özgürlüğe sahip değildir, tüm zaman dilimlerini tüketir ve daha sonra hazır bir kuyruğa girerler. Bu ise yeterince yüksek önceliğe sahipse bunları hemen ardından çalıştırmak mümkün, ama bu, Windows yürütme zamanı ölçer nasıl bir ilgisi vardır.
Andon M. Coleman

Bekleyen bir G / Ç bağlantılı işlemin önceliği temel olarak farklıdır ve Windows'ta bildirilen çalışma zamanı üzerinde ölçülebilir bir etkisi olabilir. Yine Windows, çalışma zamanını süresi dolan kuantum sayısı olarak ölçer (bir işlem 10 ms kuantumdan 1 ms harcar ve G / Ç için gönüllü olarak kalan 9 ms'yi beklese bile, Windows çekirdeği 10 ms değerinde sayılır) kullanıcı modu çalışma zamanı). Önleme, G / Ç ile bağlantılı uygulamaların bitirilmesi için daha az miktar gerektirmesine yardımcı olabilir. Diğer çekirdekler (örneğin Linux), bir işlemin çalışma zamanında kısmi kuantumu doğru bir şekilde ölçebilir, ancak Windows bunu yapamaz.
Andon M. Coleman

@ AndonM.Coleman Vista ve sonrasında, evet, yapabilir ve yapar.
Jamie Hanrahan

@JamieHanrahan: timeBeginPeriod (...)Etkileşimli her şeyin zaten yaptığı her zaman arayabilirsiniz . Bir oyun başladığında bunu genellikle 1 olarak ayarlar ve bu, sistemde çalışan her şeye kart boyunca 1 ms'lik bir zamanlama aralığı uygular. Sadece bunu yapan süreçten izole değil. Windows'u çoklu görevler için ciddiye almanın zor olmasının bir nedeni de budur.
Andon M. Coleman
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.