Что нового

Загрузка процессом каждого ядра процессора

zlaya_kisa

Новичок
Сообщения
5
Репутация
0
помогите определить нагрузку каждого ядра процессом
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
zlaya_kisa
Можно узнать загрузку конкретным процессом всего процессора, а также можно узнать, какие ядра заданы для этого процесса(обычно все).
Если взять первое и поделить на второе, не получится ли то, что нужно?
 
Автор
Z

zlaya_kisa

Новичок
Сообщения
5
Репутация
0
т.е. загрузка процесса распределяется на каждый процессор цп0,цп1 и т.д. одинаково?(в процентах)
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
zlaya_kisa
что то выполняется быстрее что то медленнее, у каких то задач приоритет повыше и других пониже, не одинаково распределяется, для игр ставят все ядра кроме одного чтобы бы в систему можно было вернутся если повиснит все от неправильного распределения ресурсов.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
какие-то процессы запускает один thread (если однопоточный), другие несколько. каждый thread закрепляется только за одним ядром или логическим процессором, но несколько threadов одного процесса могут закрепиться за несколькими ядрами или логическими процессорами. поэтому в общем случае, один процесс может занять всю вычислительную мощь компьютера.
 
Автор
Z

zlaya_kisa

Новичок
Сообщения
5
Репутация
0
так какой должен быть алгоритм как узнать загрузку процессоров?что для этого нужно найти?у меня многопоточный процесс
 
Автор
Z

zlaya_kisa

Новичок
Сообщения
5
Репутация
0
есть примерно такой код может быть возможно узнать нагрузку на каждое ядро?и верен ли код,показывает как то скачками не как в диспетчере задач?
Код:
AutoIt
$strComputer="."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colProcess = $objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'calc.exe'")
$colSystemData = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor")

For $objCPU In $colSystemData
	$CPUCount = $objCPU.NumberOfCores
	;MsgBox(1,1,$CPUCount)
Next

For $objProcess In $colProcess

	$ProcessID = $objProcess.ProcessId
	$colPerfData = $objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process  Where IDProcess = " & $ProcessID)
	For $objPerfData In $colPerfData
		$N1 = $objPerfData.PercentProcessorTime
		$D1 = $objPerfData.TimeStamp_Sys100NS
	Next
	$colPerfData = $objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process  Where IDProcess = " & $ProcessID)
	For $objPerfData In $colPerfData
		$N2 = $objPerfData.PercentProcessorTime
		$D2 = $objPerfData.TimeStamp_Sys100NS
	Next
	$Nd = $N2 - $N1
	$Dd = $D2 - $D1
	$PercentProcessorTime = Round(((($Nd / $Dd)) * 100) / $CPUCount)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
zlaya_kisa

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Верх