Saya sudah mendapat 2 aplikasi yang sama-sama menggunakan banyak sumber daya sistem. Ketika saya mengurangi prioritas satu di Task Manager, sementara meningkatkan yang lain, saya tidak melihat peningkatan signifikan dalam kecepatan dalam aplikasi dengan prioritas yang lebih tinggi.
Kenapa ini? Apakah ada lebih banyak hal yang terjadi atau masih banyak yang perlu dilakukan?
task-manager
priority
Musa
sumber
sumber
Jawaban:
Prioritas tidak membantu ketika bottleneck adalah CPU itu sendiri. Apa yang sebenarnya dilakukan prioritas adalah mempengaruhi algoritma penjadwalan yang digunakan Sistem Operasi untuk menentukan proses mana yang berjalan selanjutnya karena tidak ada cukup prosesor di sebagian besar sistem untuk menjalankan setiap proses secara terus menerus.
Tugas dengan prioritas lebih tinggi akan membuat jalannya ke puncak antrian lebih cepat, jadi ini membantu dengan latensi umum, tetapi jika proses Anda melelahkan seluruh kutu waktu itu dialokasikan pada perhitungan aktual maka penjadwalan tidak akan mengubah apa pun di sana. Mengubah prioritas lebih berguna ketika Anda memiliki proses yang menunggu di I / O dan Anda ingin menjadi lebih responsif.
sumber
Prioritas adalah waktu CPU. Apakah semua core digunakan 100% setiap saat? Jika tidak, maka prioritas tidak akan berpengaruh. Cukup sering CPU bukan penghambat, dan itu adalah memori, disk, atau sumber daya GPU.
sumber
Prioritas hanya penting ketika ada utas yang lebih bisa dijalankan daripada inti CPU yang tersedia. Ketika itu terjadi, prioritas mengontrol utas yang dapat dijalankan. Di sebagian besar sistem, tidak ada cukup komputasi yang terjadi untuk pertikaian pada CPU: utas semuanya diblokir , menunggu sesuatu terjadi. Itu mungkin sedang menunggu Anda untuk mengetik sesuatu, menggerakkan mouse, menyentuh layar, atau agar data datang dari disk, jaringan, beberapa perangkat lain yang Anda tancapkan, atau untuk utas lainnya untuk menyelesaikan mengerjakan data penting struktur. Mungkin sedang menunggu sebagian program untuk membaca dari disk atau beberapa memori yang ditukar untuk dibaca kembali, daripada secara eksplisit membaca file.
Di Windows, penjadwal membuat antrean utas yang dapat dijalankan di setiap tingkat prioritas. Ketika ia membuat keputusan penjadwalan - apakah utas telah kehabisan kuantumnya (waktu yang diizinkan sebelum hal lain perlu dijalankan), artinya utas lain harus berbelok, atau utas telah diblokir dan tidak lagi bisa dijalankan, atau prioritas lebih tinggi utas telah diblokir - utas berikutnya dalam antrian di tingkat prioritas teratas dengan utas yang dapat dijalankan akan dijadwalkan. Jika utas yang berjalan telah menggunakan kuantumnya, ia diletakkan di ujung antrian. Jika itu satu-satunya utas pada tingkat prioritasnya yang dapat dijalankan, dan tidak ada utas lain yang prioritasnya lebih tinggi, tetapi tidak berjalan, utas, itu akan mendapat giliran lain.
Dalam sistem multicore / multiprosesor, mungkin ada batasan di mana core dapat dijalankan. Juga, sistem mencoba untuk menjaga utas pada inti ideal mereka dan dalam simpul NUMA mereka sehingga data utas tersebut kemungkinan masih berada dalam cache inti itu dan memiliki akses cepat ke data yang dibuatnya. Utas masih akan berjalan di inti yang tidak ideal jika tidak ada pilihan apa yang akan dijalankan selanjutnya.
Sistem menggunakan berbagai dorongan prioritas dinamis dan ukuran kuantum dinamis sehingga aplikasi latar depan mendapat lebih banyak waktu (jika diperlukan) daripada proses latar belakang, dan agar proses dapat bereaksi dengan cepat ketika operasi I / O selesai (termasuk mouse, keyboard, dan input layar sentuh). Selain itu, peningkatan prioritas digunakan untuk mengatasi inversi prioritas, di mana utas prioritas tinggi sedang menunggu sumber daya yang dimiliki utas prioritas rendah saat ini. Jika ada utas prioritas menengah yang juga berjalan, ia akan kelaparan utas waktu prosesor prioritas rendah, menahan utas prioritas tinggi. Jadi utas prioritas rendah sementara ditingkatkan ke prioritas yang lebih tinggi sehingga mendapatkan waktu dan mudah-mudahan melepaskan sumber daya yang dibutuhkan utas prioritas tinggi.
Sebelum Windows Vista, prioritas utas tidak berpengaruh pada seberapa cepat operasi I / O selesai. Sejak Windows Vista, I / Os juga dapat memiliki prioritas, yang secara default berasal dari prioritas utas.
Rangkuman: Anda sebagian besar tidak akan melihat pengaruh mengubah prioritas utas kecuali CPU Anda sarat beban, dan bahkan efeknya biasanya minimal. Jika proses harus menunggu I / O atau tidak bersaing dengan proses lain untuk waktu CPU, itu sudah berjalan tercepat yang bisa dan mengubah prioritas tidak akan membuatnya lebih cepat.
sumber
Secara umum, dibutuhkan upaya ekstra untuk membuat program menggunakan lebih dari satu CPU (dengan menambahkan multi-threading). Jadi, bahkan jika program memiliki prioritas tertinggi yang tersedia, itu mungkin hanya menggunakan satu inti.
Kemungkinan masalah lain:
sumber
Bahkan meningkatkan prioritas I / O dari proses I / O-terikat tidak akan membuatnya berjalan lebih cepat. Sebagai contoh, jika itu adalah konsumen data yang dihasilkan oleh proses yang terpisah, mungkin jarak jauh, dan sesuai dengan tingkat di mana sumber itu menghasilkan data, maka ia tidak dapat berjalan lebih cepat atau memiliki throughput yang lebih tinggi.
Bertentangan dengan apa yang secara kategoris dinyatakan dalam kalimat pertama dari jawaban yang saat ini diterima ( /superuser//a/752587/322588 ), perubahan prioritas paling efektif ketika CPU menjadi hambatan, seperti dijelaskan dalam jawaban Mike Dimmick ( /superuser//a/752864/322588 ). Selanjutnya, pernyataan dalam paragraf kedua jawaban yang diterima, "jika proses Anda melelahkan seluruh waktu kutu itu dialokasikan pada perhitungan yang sebenarnya maka penjadwalan tidak akan mengubah apa pun di sana" benar-benar salah kecuali proses tersebut umumnya memiliki prioritas tertinggi dari semua utas runnable setiap kali menunggu untuk dijalankan. Ini karena dalam semua keadaan lain, menaikkan prioritas kemungkinan akan membuatnya lebih banyak rentang waktu per interval jam dinding.
Mike Dimmick menunjukkan masalah dengan jawaban ini beberapa hari yang lalu, dan memberikan jawaban yang jauh lebih baik, namun yang pertama secara misterius terus mendapatkan suara. Klaim pengarangnya bahwa ia hanya meredam jawabannya bagi kami boneka tidak masuk akal, karena itu tidak hanya sederhana, atau bahkan sederhana, itu salah, paling tidak berkaitan dengan proses yang terikat CPU.
Penafian: Saya tidak tahu Pak Dimmick, meskipun saya bisa mengatakan dia tahu apa yang dia tulis.
sumber
timeBeginPeriod (...)
, yang sudah dilakukan oleh apa pun yang interaktif. Sebuah permainan biasanya akan mengatur ini ke 1 ketika mulai, dan itu berlaku interval penjadwalan 1 ms di seluruh papan untuk semua yang berjalan pada sistem. Itu tidak terisolasi hanya dengan proses yang melakukannya. Itu bagian dari alasan sulit untuk menganggap Windows serius untuk multi-tasking.