Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Система - Переключение задач на одно ядро

Ответить
Настройки темы
Система - Переключение задач на одно ядро

Аватара для rsod

Ветеран


Сообщения: 1344
Благодарности: 154


Конфигурация

Профиль | Отправить PM | Цитировать


Есть ли какая-нибудь утилитка, позволяющая на время действия некоторого процесса отдать ему 3 (2, 1) из нескольких ядер, а остальные процессы автоматически переключить на другие ядра? Естественно, после завершения процесса всё должно автоматически вернуться "на круги своя".

-------


Отправлено: 21:29, 13-03-2011

 

Аватара для Казбек

Ветеран


Сообщения: 5380
Благодарности: 1874

Профиль | Отправить PM | Цитировать


rsod,
http://www.howtogeek.com/howto/windo...windows-vista/

-------
Кто реку перешел, тому росы бояться ни к чему


Отправлено: 21:37, 13-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Moderator


Сообщения: 53180
Благодарности: 15431

Профиль | Отправить PM | Цитировать


rsod, в Диспетчере задач на процессе правой кнопкой мыши -> Задать соответствие.

Отправлено: 21:39, 13-03-2011 | #3


Аватара для rsod

Ветеран


Сообщения: 1344
Благодарности: 154

Профиль | Отправить PM | Цитировать


Казбек, Petya V4sechkin, эти способы я знаю, но мне нужно немножко другое. Мне нужно автопереключение всех выполняющихся и вновь запущенных процессов на, скажем, первые два ядра, а два другие ядра отдать под единственный процесс. Временно, конечно. Я, конечно, думаю, что такого в природе не существует, но всё-таки для верности создал тему

-------


Отправлено: 15:01, 14-03-2011 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


rsod, теоретически это можно сделать. Практически же — малопредсказуемо, как поведут себя в этом случае системные процессы. Проще сделать так, как описано выше («ручками», або программно), а у запускаемого Вами процесса дополнительно выставить высокий приоритет. Я думаю так.

Отправлено: 17:38, 14-03-2011 | #5


Аватара для rsod

Ветеран


Сообщения: 1344
Благодарности: 154

Профиль | Отправить PM | Цитировать


Цитата Iska:
системные процессы »
ну в принципе их можно и не трогать, достаточно обрабатывать процессы, запущенные от имени какого-либо пользователя компьютера.

-------


Отправлено: 19:27, 14-03-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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», и Вы хотите большей разницы — можете экспериментировать. Я не стал.

Отправлено: 04:06, 15-03-2011 | #7



Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Система - Переключение задач на одно ядро

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] как сделать чтоб процесс автоматически использовал только одно ядро? mitiya Microsoft Windows 2000/XP 11 11-05-2014 15:46
Разное - SP2 , нет понели задач и значков на рабочем столе + диспечер задач не открывается McIntosh Лечение систем от вредоносных программ 6 10-04-2010 13:08
Работает только одно ядро nomad73 Процесcоры 18 03-06-2008 14:46




 
Переход