Bagaimana prioritas bekerja pada task-manager dan kapan saya harus mengaturnya?

30

Saya telah menetapkan beberapa proses prioritas untuk melihat apa yang sebenarnya terjadi, tetapi, coba tebak ... Tidak ada; semuanya berjalan dengan cara yang sama ...

Saya menemukan di Google bahwa prioritas tidak benar-benar terkait dengan kecepatan pemrosesan, apakah itu benar? Kenapa tidak? jika suatu proses memiliki prioritas tertinggi, bukankah seharusnya lebih cepat ??

Pablito
sumber
4
Jawaban singkat: When should I set [priorities in Task Manager]? Hampir tidak pernah.
Dan Henderson
2
Hal penting lain yang perlu dipahami adalah bahwa menegakkan prioritas mengurangi jumlah total pekerjaan yang dapat dilakukan sistem. Inilah sebabnya mengapa sistem operasi desktop umum bukan sistem operasi waktu-nyata. Dan semakin Anda membuatnya berperilaku seperti sistem operasi waktu-nyata, semakin tidak efisien. Gangguan, misalnya, meledakkan cache. Pekerjaan dengan prioritas lebih rendah masih harus diselesaikan dan masih bersaing untuk I / O. Melakukan kurang efisien, dalam potongan yang lebih kecil, tidak menguntungkan siapa pun.
David Schwartz
Jangan mencoba berpikir untuk komputer Anda. Kamu tidak akan menang. Ia tahu cara menangani utasnya jauh lebih baik daripada Anda.
b1nary.atr0phy

Jawaban:

52

Misalkan Anda memiliki kartu "buka kepala" untuk toko bahan makanan. Anda pergi ke toko, mengisi gerobak Anda, pergi ke konter checkout, dan menemukan tidak ada yang mengantri. Apakah kartu Anda membantu Anda diperiksa lebih cepat? Nggak.

Prioritas tidak memengaruhi kecepatan pemrosesan, karena proses prioritas yang lebih tinggi tidak dapat berjalan lebih cepat atau bahkan menggunakan lebih banyak waktu CPU ... tidak jika itu satu-satunya hal yang ingin menggunakan CPU.

Untuk benar-benar membicarakan hal ini kita perlu menyebutkan utas. Proses tidak "berjalan" di Windows. Thread, yang merupakan bagian dari proses, adalah yang dijalankan. (Meskipun jika suatu proses hanya memiliki satu utas, perbedaannya cukup kabur dari luar.)

(Omong-omong: Terminologi pemasaran yang dimiliki CPU, misalnya, "empat core dan delapan thread", menyesatkan. CPU memiliki core, tetapi CPU tidak "memiliki" thread. Thread adalah bagian dari proses. Inti CPU tanpa hyperthreading diaktifkan dapat menjalankan satu utas; dengan diaktifkannya hyperhreading, sebuah inti dapat menjalankan dua utas. Tetapi CPU tidak "memiliki" utas.)

Setiap utas selalu dalam salah satu dari beberapa negara penjadwalan. Status yang paling umum terlihat adalah: Menunggu (* nix menyebut ini "diblokir"; di kedua OS ini berarti menunggu I / O atau yang serupa, tidak menggunakan waktu CPU dan tidak mau ada); Siap (ingin menggunakan waktu CPU tetapi tidak ada CPU yang tersedia untuk itu sekarang); dan Lari . Hanya Running thread yang menghabiskan waktu CPU; yaitu jika suatu proses tidak memiliki thread Menjalankan, itu akan terlihat menggunakan waktu CPU nol% dalam alat-alat seperti Task Manager.

Thread hanya dapat berjalan pada satu inti (atau, jika hyperthreading diaktifkan, "prosesor logis") pada suatu waktu, sehingga suatu proses hanya dapat menggunakan sebanyak inti CPU (atau piringan hitam) karena memiliki utas yang ingin dijalankan saat ini . (Pernyataan yang sama dapat dibuat dari sistem secara keseluruhan.)

Sebagian utas pada sebagian besar sistem menghabiskan sebagian besar waktu mereka dalam status Tunggu. (Inilah sebabnya mengapa proses idle Anda harus mendapatkan lebih dari 95% dari waktu CPU ketika sistem Anda tidak melakukan apa-apa.) Pengecualian akan menjadi "kerja" utas hal-hal seperti rendering video atau 3d, game, dll. Sangat sedikit utas benar-benar dapat menggunakan 100% CPU, karena mereka umumnya harus bekerja pada beberapa input data yang harus mereka baca dari suatu tempat, dan mereka umumnya membuat data output yang harus ditulis di suatu tempat. Dan mereka mungkin merujuk ke banyak data yang berbeda dalam memori dari waktu ke waktu, yang mungkin berarti mereka harus menunggu kesalahan halaman yang sulit untuk diselesaikan.

Tapi utas melakukan sesuatu seperti rendering video atau rendering gambar 3D mungkin menghabiskan hampir semua waktu mereka "komputasi" dalam CPU, dan sangat sedikit menunggu I / O. Utas semacam itu sering disebut "terikat-terikat", yang berarti bahwa kinerja keseluruhannya terutama dibatasi oleh kecepatan CPU.

Pengaturan yang Anda buat di Task Manager sebenarnya menetapkan "prioritas dasar" untuk semua utas dalam proses. Prioritas aktual, atau "saat ini," dari utas mungkin lebih tinggi (tetapi tidak pernah lebih rendah dari basis). Lebih lanjut tentang itu sebentar lagi. Menjadwalkan keputusan ("siapa yang menjalankan, dan pada CPU apa") selalu dilakukan menggunakan prioritas utas saat ini. Prioritas hanya bermakna untuk utas Siap dan Berlari (atau dengan kata lain, prioritas tidak berarti untuk utas Menunggu).

Windows menggunakan algoritma penjadwalan preemptive . Jika hanya satu utas dalam sistem yang ingin menggunakan waktu CPU, maka tidak masalah apa prioritasnya; itu mendapat 100% dari CPU. Ini bukan seolah-olah penjadwal "menahan" sebagian dari kemampuan CPU ketika thread prioritas rendah sedang berjalan, kalau-kalau sesuatu prioritas lebih tinggi datang.

Jika dua utas ingin menggunakan CPU, dan mereka memiliki prioritas yang sama, maka mereka dijadwalkan melalui apa yang disebut "time-slicing" dan seiring waktu, masing-masing mendapat sekitar 50% dari waktu CPU. Sedangkan jika mereka dari prioritas yang berbeda maka utas yang prioritas tinggi mendapat 100% dan yang lebih rendah tidak mendapat apa - apa .

(Dalam praktiknya tidak akan mendapatkan apa-apa, karena akan mengalami "peningkatan prioritas penghindaran kelaparan" berkala yang dapat memberikannya beberapa puluh msec setiap 4 atau 5 detik atau lebih. Tetapi ini bukan pengecualian untuk "prioritas yang lebih tinggi) menang ", karena dilakukan dengan menyesuaikan prioritas utas kelaparan.)

Jika Anda memiliki lebih dari satu inti CPU, semuanya menjadi lebih menarik, dan prioritas pada umumnya kurang berpengaruh. Misalkan Anda memiliki dua utas yang ingin dijalankan. Dan anggaplah Anda memiliki dua atau lebih inti CPU yang tidak melakukan hal lain dengan prioritas yang sama atau lebih tinggi daripada utas tersebut. Kemudian kedua utas Anda masing-masing akan mendapatkan 100% inti, terlepas dari prioritasnya masing-masing .

(Dua orang muncul di supermarket, dan ada dua catur gratis. Salah satu pelanggan memiliki kartu "pergi ke kepala baris". Tidak masalah.)

tl; versi dr (sejauh ini): Prioritasnya bukan tentang "siapa yang mendapatkan proporsi waktu CPU", melainkan "siapa yang harus berjalan terlebih dahulu".

Saya tidak akan membahas banyak tentang hyperthreading di sini, kecuali untuk mengatakan bahwa Windows memperlakukan masing-masing dari dua "prosesor logis" dalam sebuah inti dengan cara yang hampir sama dengan itu akan memperlakukan sebuah inti jika HT dimatikan. yaitu mereka diperlakukan sebagai CPU "nyata", dengan pengecualian ini: Windows akan berusaha sangat keras untuk tidak menggunakan lebih dari satu LP dalam sebuah inti sekaligus. yaitu Anda tidak biasanya mulai melihat kedua piringan hitam dalam inti yang digunakan sampai Anda memiliki lebih dari jumlah utas yang mencoba menjalankan semuanya pada saat yang bersamaan. Ini karena kedua "prosesor logis" tidak memberi Anda kinerja dua kali lipat dari inti tunggal yang tidak mengalami hipertensi.

Tentang "prioritas dasar": Windows akan menyesuaikan ("meningkatkan" dan "meluruh") prioritas utas saat ini berdasarkan apa yang telah mereka lakukan baru-baru ini. Thread yang baru saja menyelesaikan operasi I / O biasanya akan menjadi satu atau dua takik di atas basis; Utas UI (utas yang menjalankan jendela) seringkali akan jauh lebih tinggi; Utas yang terikat CPU biasanya ada di pangkalan mereka. Tujuan dari ini adalah untuk menjaga respon di UI program, dan juga untuk menjaga permintaan IO mengalir ke hal-hal seperti disk.

Suatu program (proses) juga dapat mengubah prioritas dasar dari masing-masing utasnya, dalam rentang yang ditentukan oleh prioritas proses (hal yang Anda atur di Task Manager). Tetapi sebagian besar program tidak mengganggu. (Lebih dari mereka seharusnya.)

Ada hal-hal lain yang terjadi. Karena dorongan / pembusukan prioritas, dan karena sistem multi-pemrosesan (baik multicore, atau hyperthreaded, atau keduanya) sangat umum akhir-akhir ini, dan karena selalu ada hal-hal yang berjalan di latar belakang di Windows (tapi, kami harap, tidak menggunakan banyak waktu CPU), dan karena efek dari kedua "afinitas" keras dan lunak, sulit untuk menjalankan kasus uji dan mendapatkan hasil yang tepat yang akan diprediksi di sini. Tapi ini seharusnya memberi Anda dekat dengan gambar yang benar.

Kesimpulannya...

Masuk akal untuk meninggalkan kebanyakan hal di "Normal". Jika tidak, Anda dapat dengan mudah berakhir kelaparan sesuatu yang Anda benar-benar ingin bekerja (meskipun Anda mungkin tidak tahu bahwa itu ada), seperti fungsi cache disk pembilasan OS. Memang, banyak dari proses OS akan berada di luar Normal, dan mereka harus dibiarkan di mana pun Windows menempatkannya.

Kasus yang masuk akal untuk menggunakan Task Manager untuk mengutak-atik prioritas adalah jika Anda memiliki beberapa tugas CPU-hogging (seperti rendering video atau 3D) dan memperlambat penggunaan sistem saat menjalankannya. Yang benar adalah, percaya atau tidak, untuk menurunkan prioritasnya dengan satu atau dua tingkat. Ini akan dengan senang hati menggunakan semua siklus CPU yang tidak diinginkan oleh orang lain tetapi akan menghindari penggunaan interaktif sistem Anda. Mungkin butuh sedikit lebih lama untuk menyelesaikan pekerjaannya, tetapi akan menyelesaikan pekerjaannya dengan sedikit gangguan terhadap penggunaan interaktif Anda dari program lain. Jika Anda tidak menyukai pengorbanan itu, jangan lakukan itu! Tetapi atur ke prioritas tinggi dalam upaya "untuk membuatnya lebih cepat" dan itu mungkin menggantung seluruh UI Anda sampai selesai.

Jangan pernah mengatur apa pun ke kelas prioritas Realtime.

(Sunting - paragraf ini ditambahkan) Ok, itu pernyataan yang ekstrem. ("Tidak ada klaim universal yang benar - tidak terkecuali yang ini.") Setidaknya, bukan tanpa pertimbangan yang sangat hati-hati. Jika tujuan Anda adalah membuat sesuatu berjalan lebih cepat, itu mungkin tidak akan membantu. Tapi itu mungkin "mengunci keras" sistem Anda (membutuhkan reset, atau pada kebanyakan mesin modern, memerlukan siklus daya). Atau membuatnya sangat tidak responsif sehingga mungkin sulit dikunci.

nb: Aplikasi pemutar video apa pun harus memilih fitur "Penjadwalan kelas Multimedia" di Vista dan yang lebih baru. Ini secara otomatis akan memberikannya hingga 80% dari CPU, diperhitungkan dalam interval yang relatif singkat. Jika Anda tidak bisa mendapatkan pemutaran bebas kesalahan dengan sesuatu yang sangat salah.

Untuk detail lebih lanjut, lihat bab tentang utas dan penjadwalan di Windows Internals 6th Edition oleh Solomon, Russinovich, dan Ionescu.

Lihat juga jawaban saya di sini untuk info tentang bagaimana prioritas proses dan utas ditetapkan, dan arti dari kolom "Prioritas" di Task Manager.

Jamie Hanrahan
sumber
1
Ngomong-ngomong, jawaban saya untuk pertanyaan terkait berikut ini terkait: superuser.com/questions/949030/…
Jamie Hanrahan
1
Ngomong-ngomong: "Penjadwalan", "penjadwal", dll., Di sini merujuk ke rutinitas kernel Windows yang memutuskan utas mana yang harus dijalankan dan CPU mana yang harus mereka jalankan. Bukan untuk "penjadwalan tugas", yaitu tentang meluncurkan proses pada waktu tertentu atau sebagai respons terhadap berbagai pemicu.
Jamie Hanrahan
@JamieHanrahan ok saya memindahkannya ke sini: superuser.com/questions/1380473/…
Julien__
5

Mengubah prioritas mengubah cara sistem operasi mengalokasikan waktu CPU untuk menjalankan aplikasi. Ini hanya menghasilkan efek yang nyata jika keseluruhan utilisasi CPU tinggi.

Misalnya Anda menyandikan video dan menonton video yang berbeda secara bersamaan. Kemungkinan, aplikasi pengkodean akan memanfaatkan daya komputasi 100% pada semua inti CPU Anda. Akibatnya, aplikasi lain mungkin gagap.

Windows secara default akan memberikan prioritas "normal" yang sama untuk kedua aplikasi. Pada titik ini Anda mungkin ingin meningkatkan prioritas perangkat lunak pemutar film Anda. Dengan cara ini Anda akan memiliki pemutaran video yang lancar dengan mengorbankan pengkodean video yang lebih lambat karena perangkat lunak pengkodean akan terdegradasi ke proses latar belakang dibandingkan dengan pemutar video.

Benjamin Hastings
sumber
"Kemungkinan, aplikasi pengkodean akan memanfaatkan daya komputasi 100% pada semua inti CPU Anda." Itu hanya mungkin jika ada setidaknya beberapa utas pengkodean jumlah inti .
Jamie Hanrahan