Як змінити пріоритет вводу / виводу процесу чи потоку в Win7?


32

Провідник процесів здатний показати ефективний пріоритет IO даного потоку, але не змінити його. Вважаючи, що підтримка пріоритетності введення-виведення даних є порівняно новою особливістю, більшість програм не встановлюють власні пріоритети вводу-виводу. Здається, що за замовчуванням пріоритет вводу-виводу походить від пріоритету потоку (а не пріоритету процесу), який також Провідник процесів не може змінити.

Чи є якісь інші інструменти там, які можуть допомогти мені змінити пріоритет IO певного потоку / всіх потоків заданого процесу?


Існує майже те ж саме питання на переповнення стека: stackoverflow.com/questions/301290 / ...
Mehper C. Palavuzlar

3
@ [Мепер К. Палавузлар] правда, але це не для програмного забезпечення, яке я розробляю - я шукаю готовий інструмент для цього на сторонній програмі.
RomanSt

Відповіді:


11

Готовий інструмент

Стороннім інструментом для встановлення пріоритетів введення / виводу процесів, будь-якими ручними діями користувача або автоматизацією та наполегливістю, буде Process Lasso . Він може встановлювати практично будь-які налаштування процесу, і робити це постійно, або за правилами (наприклад, коли це відбувається, змінюйте пріоритет вводу / виводу цього).

Програмна відповідь

Відповідь - простий дзвінок API до Native API NT, NTSetInformationProcess . У DDK 2008 року він визначений як клас "IoPriority". У NT6 підтримуються лише два рівні: дуже низький (фоновий) та нормальний . Технічно визначено 5 рівнів - критичний, високий, нормальний, низький і дуже низький. Рівень критики зарезервований для операцій підкачки. Даних про інші немає.

Однак правильним способом використання пріоритету вводу / виводу є лише запуск «фонового режиму» за допомогою виклику до класу Windows API SetProcessPriorityClass , що постачає PROCESSS_MODE_BACKGROUND_BEGIN. Це призведе до використання дуже низького (фонового) пріоритету вводу / виводу, а також класу пріоритетів процесора IDLE. Після завершення поверніться через PROCESS_MODE_BACKGROUND_END.

SetThreadPriority API також дозволить цей же фоновий режим для конкретних потоків. Тут ви поставите THREAD_MODE_BACKGROUND_BEGIN / END.


Я не займаюся програмуванням Windows та вмістом на рівні ОС, але я чув, як натрапляють на пріоритет потоку, аж до THREAD_PRIORITY_TIME_CRITICAL, це можливо з вашою програмою чи будь-якою програмою? або це все-таки лише IO PRIORITY, який можна відрегулювати, а не пріоритет процесора? Я думаю, що зміна пріоритету вводу-виводу не матиме великої різниці у використанні процесора, правда?
барлоп

Так. І те й інше можна встановити та зберегти. Також можна встановити чи змінити багато інших речей на основі правил (наприклад, спорідненість процесора). Пріоритет вводу / виводу відрізняється від пріоритету процесора, правильно.
діаста

Це не "готовий інструмент для цього на сторонніх програмах".
Cees Timmerman

Вибачте, я думаю, що питання, можливо, було відредаговано, оскільки явно я відповідав із програмної сторони (не редагував). Process Lasso - це «готовий інструмент для цього на сторонній програмі». Дивіться bitsum.com
діаста

23

Я розробив це після того, як побачив, як ніхто не заважав: https://sourceforge.net/projects/iopriority/ (відкритий код)

Ця програма здатна встановити пріоритет вводу / виводу процесу, і всі потоки впливають на нього негайно. Це досить легко модифікувати для роботи з потоками замість процесів.


1
Щойно я помітив, ви не дозволяєте йому змінити процес на високий пріоритет на сервері 2012R2.
jftuga

14

ProcessHacker - це інструмент GUI, який може змінити пріоритет IO довільного процесу.


Чому це схоже на те, що робив Русинович?
Даніель Мошмодор

1
@ DanielMošmondor Може бути, це надихнуло ProcExp та його обмеження? Я особисто перейшов, оскільки ProcExp показав абсолютно неправильне використання процесора на своєму ноутбуці після версії 14.
RomanSt

1
Мало того, ProcExp також міг BSOD мій комп і т. Д. Це безкоштовно?
Даніель Мошмодор

@ DanielMošmondor Так, тим більше, що насправді, схоже, всіляко більше, ніж ProcExp Трохи інший інтерфейс, але справді дуже здатний.
RomanSt

1

Я частковий до безкоштовного додатку під назвою PRIO, який є заощадженням пріоритетності процесу (серед іншого) з дуже маленьким (менше 1 Мб) слідом. Після установки він безшумно працює у фоновому режимі, поки вам це не потрібно, і його інтерфейс вбудовується безпосередньо в диспетчер завдань Windows, розширюючи його функціональність і роблячи так, ніби додані функції завжди були частиною диспетчера завдань. Коли ви клацніть правою кнопкою миші процес в диспетчері завдань з метою зміни його пріоритету, деякі додаткові функції PRIO стають очевидними, оскільки ви можете змінити не тільки пріоритет процесора, але і його пріоритет вводу / виводу (також ваше запитання) , і ви можете вибрати Зберегти нові налаштування, якщо цього захочете. Останнє дозволяє зробити так, що щоразу, коли цей процес (тобто ця програма) запускається, і пріоритети процесора, і введення / виведення, встановлені і збережені вами, набувають чинності.

У додатку є інші функції, які також розширюють функціональність різних вкладок у Менеджері завдань Windows. Версії існують як для 32-, так і для 64-бітних систем, а додаток безкоштовний для особистого використання.


Звучить як чудове додаток. Отримали посилання?
Штійн де Вітт

1
Якщо ви маєте на увазі PRIO, він доступний у кількох агрегаторах вмісту (наприклад, cnet), але безпосередньо з веб-сайту розробника буде prnwatch.com/prio
Майк Муньє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.