c语言怎么获取线程数量?

c语言怎么获取线程数量?,第1张

以记事本进程为例,在该进程启动的情况下:

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了,过多的程序线程数不但不会提高性能,反而还会因为线程间的频繁切换 而受影响,具体需要根据线程处理的业务考略,不断调整线程数个数,确定当前系统最优的线程数。

#include <windows.h>

#include <stdio.h>

#include <conio.h>

DWORD CALLBACK ThreadProc(LPVOID lpParam)

{

printf("thread %d is running\n",*(int*)lpParam)

return 0

}

int main()

{

HANDLE pThread[10]

int thread[10]

for(int i=0i<10i++)

{

thread[i]=i

pThread[i]=CreateThread(NULL,0,ThreadProc,thread+i,0,NULL)

}

WaitForMultipleObjects(10,pThread,TRUE,INFINITE)

getch()

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12090328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存