rsod, принцип понятен.
Цитата:
Цитата rsod
Есть ли какая-нибудь утилитка, »
|
Утилитки такой нет. Можно попробовать написать её, например, на PowerShell. Наподобие:
Код:
# Имя текущего пользователя
$sUserName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
# Хэш-таблица для имен владельцев процессов
$aProcessOwners = @{ }
# Заполняем хэш-таблицу именами владельцев процессов
Get-WmiObject "Win32_Process" | % { $aProcessOwners[$_.Handle] = $_.GetOwner().Domain + "\" + $_.GetOwner().User }
# Получаем коллекцию процессов, владельцем которых является текущий пользователь,
# и которые имеют текущий приоритет выполнения равный 8 (Normal Priority)
$cProcess = Get-Process | `
Where-Object -FilterScript {
($aProcessOwners[$_.Id.ToString()] -eq $sUserName) `
-and ($_.PriorityClass -eq [System.Diagnostics.ProcessPriorityClass]::Normal)
}
# Каждому процессу из полученной коллекции пытаемся понизить приоритет до 6 (BelowNormal Priority)
# и назначаем для его исполнения нулевой процессор (битовая маска 0x01 — binary 00000001)
$cProcess | `
ForEach-Object -Process {
Try {
$_.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::BelowNormal
$_.ProcessorAffinity = 0x01
} Catch {}
}
# Запускаем новый процесс «Косынка»
$oProcess = Start-Process -FilePath "c:\windows\system32\freecell.exe" -PassThru
# Задаём ему высокий приоритет выполнения, равный 13 (High Priority)
# и назначаем для его исполнения первый процессор (битовая маска 0x02 — binary 00000010)
$oProcess.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::High
$oProcess.ProcessorAffinity = 0x02
# Ожидаем завершения запущенного процесса
$oProcess | Wait-Process
# Вобрат перебираем процессы из коллекции, пытаемся установить приоритет процесса на 8 (Normal Priority)
# и назначаем для его исполнения оба из имеющихся процессоров (битовая маска 0x03 — binary 00000011)
$cProcess | `
ForEach-Object -Process {
Try {
$_.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::Normal
$_.ProcessorAffinity = 0x03
} Catch {}
}
Я решил дополнительно ограничиться процессами, имеющими нормальный приоритет, поскольку:
* если у процесса и так был пониженный приоритет — нет нужды его трогать;
* если у процесса был повышенный приоритет — его лучше не трогать ;).
Поскольку в моём наличии было лишь два ядра, я привёл пример кода именно для такого количества. Вы же можете задавать потребные битовые маски для своего процессора.
Если Вам недостаточно «BelowNormal»/«High», и Вы хотите большей разницы — можете экспериментировать. Я не стал.