Використання процесорного процесора не змінюється для іншого пріоритету


0

Я написав нескінченний цикл у python, щоб надрукувати Ні! у виході.

while True:
    print("No!")

Коли я його виконую, я бачу його процес (pythonw.exe) у Windows-Task-Manager, який використовує 60% ЦП. Я зробив правою кнопкою миші його процес і змінив пріоритет на Низький . він знову використовує 60% процесора! Потім я змінюю пріоритет на Реальний час . Він все ще використовує 60% процесора!

Оновлення: Моє загальне використання процесора для всіх процесів становить 80% !!! і 20% безкоштовно! Чому цей цикл python не використовує ці 20% ?!

Що не так з пріоритетом? Чому це не змінюється?


1
Оскільки інструкції x86, необхідні для цього, не займають більше 60% одного циклу годин
Ramhound

Скажіть, будь ласка, більш чітке як відповідь? Чому ці інструкції не займають більше 60% одного циклу тактових годин у x86? це відрізняється в x64?
TheGoodUser

X64 - це розширення архітектури x86, яка частина, ви точно не розумієте
Ramhound

Інструкції @Ramhound 1- x86, необхідні для цього, не займають більше 60% одного циклу годин. Чому ?! І 2- Чому, коли я встановив його пріоритет на " Низький", він все ще використовує 60%? Чому вона не зменшується?
TheGoodUser

Оскільки дельта завантаження, викликана цим сценарієм, та завантаження без скрипту, процесору не потрібно надавати пріоритети потокам. Що стосується іншої частини, якщо ви не знаєте складання x86, будь-які додаткові деталі не будуть корисними
Ramhound

Відповіді:


2

Пріоритет визначає, який потік запускається, коли кілька потоків змагаються за час процесора. Якщо ніщо інше не хоче CPU, нитки вашої програми отримують до 100% часу процесора, як і коли це потрібно, незалежно від пріоритету.

У вашому випадку процес Python - це єдиний, якому потрібно багато часу процесора, тому він отримає все, що просить. Якби ваша система була зайнята в іншому випадку, ви побачите 60% падіння набагато більше, ніж якби вона мала нормальний пріоритет.

Ви повинні протестувати його на іншій програмі, що споживає процесор, яка працює одночасно, наприклад, в тесті CMD оболонки, запущеному test.cmd, що містить:

:Loop
dir /s c:\
goto Loop

Тоді ви побачите наслідки зміни пріоритету вашого конкуруючого процесу. Зауважте, що вимоги ЦП у цьому прикладі будуть різними, залежно від швидкості процесора, кількості файлів c:\та розмірів кеш-диска; перенаправлення dirвиводу на >nul:збільшить завантаження процесора.


ця пакетна файлова програма використовує лише 3 відсотки! і знову це не змінюється, навіть якщо я змінюю його пріоритет! для цієї програми Python її використання CPU встановлено на 60%, тоді як моє загальне використання процесора становить 80%! Я маю на увазі, мій процесор має 20% безкоштовно !!!
TheGoodUser

Ви не можете змусити програму споживати більше часу в
тактовому

@ TheGoodUser-Sp - я не хотів робити це занадто інтенсивно, але якщо ви перенаправляєте вихід, як в dir /s c:\ >nul:, це збільшить попит на процесор. Якщо ви коментуєте dirрядок, ви створите цикл процесора.
AFH

1
@ TheGoodUser-Sp - Як доповнення, варто зазначити, що якщо інші процеси не вимагають більше 40% процесора, то 60% ваших програм програми python завжди будуть доступні. Ви також можете спробувати запустити дві копії вашої програми та змінити пріоритет однієї з них: вони не можуть отримати 60%, що гарантує, що процесор буде розтягнутий, так що пріоритети будуть враховані при розподілі ЦП.
AFH,

Команда dir не відрізняється особливими процесорами - вона пов'язана з диском.
Джеймі Ханрахан

0

У пріоритеті немає нічого поганого.

Поширене припущення, що низький або середній пріоритет, встановлений у процесі, змусить операційну систему обмежувати час процесора, доступний для потоків процесу - так, встановлення його пріоритету вище повинно дозволяти йому використовувати більше процесора!

Але це не те, що відбувається.

Ви можете встановити процес на мінімальний пріоритет, і якщо його код ніколи нічого не чекатиме, і якщо нічого іншого в системі не хоче час на процесор, цей процес отримає 100% ЦП.

Якщо процес отримує менше 100% процесора, і нічого рівного або більшого пріоритету не намагається запустити, це просто означає, що потоки процесу витрачають частину свого часу, не бажаючи процесора.

Що робить потік, якщо він не хоче процесора? Більшість часу це «чекає». Нитки чекають, коли їм потрібно щось статися, що не передбачає запуску власного коду потоку в процесорі. Зазвичай вони чекають завершення операції вводу / виводу. Це може бути запит вводу / виводу, який явно запитується потоком, або це може бути, наприклад, помилка жорсткої сторінки. (З іншого боку, час, витрачений на "очікування" затримки читання або запису оперативної пам'яті, є частиною часу процесора потоку. Це не вважається введенням / виведенням.)

Ваш цикл у Python включає функцію "друку". Це операція вводу / виводу, навіть якщо це лише на екрані.

Ви можете використовувати аналізатор продуктивності Windows, щоб отримати детальну інформацію про те, що робить pythonw.exe, і змушує його чекати.

Ви можете переглянути цю відповідь тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.