Process[] myProcess = Process.GetProcessesByName("Notepad")//获取饥吵该进亩亮程
Process p = myProcess[0]
ProcessThreadCollection PTC = p.Threads//获取其关联的线程,包括主线程
int num = PTC.Count.ToString()//获取线迅肢宽程数量
cpu个数:是指物理上,也及硬件上的核心数;
核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;
线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数
首先明白几个概念:
(1) 单个cpu线程在同一时刻只能执行单一Java程序,也就是一个线程
(2) 单个线程同时只能在单个cpu线程中执行
(3) 线程是 *** 作系统最小的调度单位,进程是资源(比如:内存)分配的最小单位
(4)Java中的所有线程在JVM进程中,CPU调度的是进程中的线程
(5)Java多线程并不是由于cpu线程数为多个才称为多线程,当Java线程数大于cpu线程数, *** 作系统使用时间片机制,采用线程调度算法,频繁的进行线 程切换。
a 那么java多进程,每个进程又多线程,cpu是如何调度的呢?
个人理解: *** 作系统并不是单纯均匀的分配cpu执行不同的进程,因为线程是调度的最小单位,所以会根据不同进程中的线程个数进行时间分片,均匀的执 行每个线程,也就是说A进程中有10个线程,而B进程中有2个进程,那么cpu分给进程的执行时间理论上应该是5:1才合理。
b cpu线程数和java线程数有直接关系吗?
个人理解:没有直接关系,正如上面所说,cpu采用分片机制执行线程,给每个线程划分很小的时间颗粒去执行,但是真正的项目中,线程要做很多的的 *** 作,读写磁盘、数据逻辑处理、出于业务需求必要的休眠等等 *** 作。
c 如何确定程序线程数?
个人理解:一般情况程序线程数等于cpu线程数的两好慧到三倍就能很好的利用cpu了,过多的程序线程数不但不会提高性能,反而还会因为线程间的频繁切换 而受影响,具体需要根据线迅迟程处理的业务考略,不亩袜李断调整线程数个数,确定当前系统最优的线程数。
VC获取进程线程数
#include
void
EnumProcess(void)
{
HANDLE
hProcessSnap
HANDLE
hProcess
PROCESSENTRY32
pe32
DWORD
dwPriorityClass
hProcessSnap
=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
0)
if
(hProcessSnap
==
INVALID_HANDLE_VALUE)
{
return
}
pe32.dwSize
=
sizeof(PROCESSENTRY32)
if
(!Process32First(hProcessSnap,
&pe32))
{
CloseHandle(hProcessSnap)
return
}
do
{
//printf("%s",
pe32.szExeFile)
//完整文件名
//printf("%d",
(int)pe32.cntThreads)//线缺陪伍伏或程数
}while(Process32Next(hProcessSnap,
&pe32))
CloseHandle(hProcessSnap)
}
如果要获取进程句柄
HANDLE
hProcessHandle
hProcessHandle
=
OpenProcess(0x1F0FFF,
true,
ProcessID)//ProcessID进程ID
这个在控制台,Win32
SDK
,MFC
都可乱带以用的,只不过
SDK
,MFC
输出就
不用
printf
了,只要把获取的内容赋给变量就行了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)