一个进程可以开启的线程受可用内存限制,如果是32位的机器,那么默认一个进程有2G的可用内存,而每个线程默认分析1M的栈空间,所以这种情况下理论最线程数在2000多个。一个解决办法是创建线程时减少线程栈的大小或是使用64位的系统。64位系统应该可以忽略这个问题了。
当然受cpu及磁盘速度及物理内存的限制。不用到达上限值,你的机器应该已经是慢如牛车了
cpu不同,最多能开的线程肯定不一样,我们一般的程序肯定是能满足的,也必要去纠结这种问题把。
一般你想开多少就能开多少的。你的对象继承了Thread或是实现了Runnable接口后,可以在main()方法中创建多个这样的对象,要很多的话,可以用for循环来创建你想要的个数。
class
MyThread
implements
Runnable{
public
void
run(){
for(int
i
=
1;
i
<
10;
i++){
Systemoutprintln(ThreadcurrentThread()getName());
}
}
}
public
class
Test{
public
static
void
main(String[]
args){
MyThread[]
myThread;
for(int
i
=
0;
i
<
100;
i++){
myThread[i]
=
new
MyThread();
}
for(int
i
=
0;
i
<
100;
i++){
new
Thread(myThread[i])start();
}
}
}
没听过考虑cpu的负载哦。
都是按程序的要求来的。
128线程即处理器的核心达到64核,每个核2个线程。
128线程(线程数是一个逻辑概念) 是通过超线程技术,用一个物理核模拟两个虚拟核,每个核2个线程,总数为128线程,在 *** 作系统看来是128核,实际为64核。
一个核心,只能同时执行一个线程,即一个核心就是一个物理线程。而intel开发出了超线程技术,1个核心能够做到2个线程计算,而6个核心则能够做到12个线程,超线程技术的好处就是无需增加物理核心就可以明显的进步CPU多线程功能。
线程数量的作用
多核心和多线程的作用主要是为了满足各类程序多任务需求,核心数和线程数量越多,那么同时运行的程序就越多,CPU能够并行处理多个任务数量,简单点就是核心数和线程数量越多,越适合多开软件或者游戏,打开的任务越多,除了多开程序,还有渲染需求,核数和线程数越多就越好。
举个例子,CPU可以想象成是一个银行,CPU核心就相当于柜员,而线程数就相当于开通了几个窗口,柜员和窗口越多,那么同时办理的业务就越多,速度也就越快。
通常情况下,一个柜员对应的是一个窗口,通过超线程技术相当于一个柜员管理着两个窗口,使用左右手同时办理两个窗口的业务,大大提高了核心的使用效率,增加了办理业务的速度。
默认情况下:
主线程+辅助线程 +<253个自己的线程<=255
含主线程和一个辅助线程,最多255个,即一个用户只能生成253个线程。
Linux最大线程数限制及当前线程数查询:
1、总结系统限制有:
/proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值
/proc/sys/kernel/thread-max
max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程
/proc/sys/vm/max_map_count
硬件内存大小
2、Java虚拟机本身限制:
-Xms #intial java heap size
-Xmx #maximum java heap size
-Xss #the stack size for each thread
3、查询当前某程序的线程或进程数
pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l 或 pstree -p 3660 | wc -l
4、查询当前整个系统已用的线程或进程数
pstree -p | wc -l
1、 cat /proc/${pid}/status
2、pstree -p ${pid}
3、top -p ${pid} 再按H 或者直接输入 top -bH -d 3 -p ${pid}
top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
4、ps xH
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
直接启动线程下面加一堆启动线程就行了,怎么写,你懂的
“启动线程”
和
调用子程序
的最大区别在于,调用子程序必须等被调的子程序执行完毕,程序才会回到原来的位置;但启动线程没有这个限制,它只负责将线程启动,启动后立即回到原点,继续执行原点后面的代码;具体什么时候线程执行到什么地方,那是 *** 作系统的事情;由线程子程序的代码可以看出,这个线程一旦进入,将再也不可能自动退出;这时我们可以利用
“强制结束线程 (线程句柄)”‘启动线程的返回值
来使它强行终止。
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并执行的线程来完成各自的任务。
多线程的好处在于可以提高CPU的利用率。在多线程的程序中,当一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。
以上就是关于c#一个应用程序域可以申请多少个线程池线程全部的内容,包括:c#一个应用程序域可以申请多少个线程池线程、java中想开多线程,线程数量控制、请问处理器是多少个线程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)