2个回答
展开全部
楼上解释的后半部分有问题。
线程数至少要相当于CPU核心数才能达到理论上的充分利用CPU。
一个线程通常只能做一个任务,在JAVA原生设计上是这样的。
但由于一个任务不一定只依赖CPU工作,还要依赖磁盘、网络、或者等待其他线程的结果。所以一个线程不会随时都在用CPU,所以可以创建比CPU核心数多很多的线程去一起执行任务,让CPU不会闲着。
CPU在多个线程间切换执行要占用性能,创建和销毁线程也会占用CPU性能,线程池是为了减少线程创建和销毁损耗的性能而存在的。
线程越多耗在管理线程上的CPU性能也越多,而用来执行任务的CPU性能就越少,所以不是越多越好。视任务对CPU的占用率来决定,能刚刚使CPU达到饱和最好
线程数至少要相当于CPU核心数才能达到理论上的充分利用CPU。
一个线程通常只能做一个任务,在JAVA原生设计上是这样的。
但由于一个任务不一定只依赖CPU工作,还要依赖磁盘、网络、或者等待其他线程的结果。所以一个线程不会随时都在用CPU,所以可以创建比CPU核心数多很多的线程去一起执行任务,让CPU不会闲着。
CPU在多个线程间切换执行要占用性能,创建和销毁线程也会占用CPU性能,线程池是为了减少线程创建和销毁损耗的性能而存在的。
线程越多耗在管理线程上的CPU性能也越多,而用来执行任务的CPU性能就越少,所以不是越多越好。视任务对CPU的占用率来决定,能刚刚使CPU达到饱和最好
追问
你说的是CPU单核的情况,但是如果是多核呢?如双核的情况下,我创建4个线程,每个核分配两个线程,这样就把4个线程分成两个组。对于运行在单核的两个线程,它是交替执行的,但是对于这个组来说(即运行在不同核上的线程),宏观上就是并行的了,道理是不是这样的呢?
晕!只能选一个满意答案啊?其余的答案还给不了分,不好意思啊~~
追答
多核和单核是同样道理的,只是把原来一个核要做的任务分成了四份,四个核还是按原来的单核方式分别工作。
ps.反正我的分都多得不知能干嘛了,来答答问题属于一种消磨时间的乐趣...
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询