电脑线程数是什么意思,电脑的核数和线程是什么意思
来源头条作者:拔土豆的程序员线程可以提升系统的执行效率,但是如果每个任务都创建一个线程去处理,这样线程会越来越多。创建和销毁线程比较耗时,频繁的创建和销毁线程会浪费很多CPU的资源。线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。(可以通过 -Xss 进行配置:栈空间大小,栈是线程独占的,所以是一个线程使用栈空间的大小)。综上:需要线程池(ThreadPool)去管理线程,不会出现内存资源被耗尽的情况,也不会出现频繁创建和销毁线程的情况,因为它内部是可以复用线程的。线程池线程数量配置经验或者说常规配置:N代表CPU核数IO密集型:配置线程数经验值是:2N频繁读取磁盘上的数据,或者需要通过网络远程调用接口CPU密集型:配置线程数经验值是:N + 1非常复杂的调用,循环次数很多,或者递归调用层次很深等混合型:如果IO密集型,和CPU密集型的执行时间相差不太大,可以拆分开配置多个线程池,以便于更好配置。如果执行时间相差太大,优化的意义不大,比如IO密集型耗时40s,CPU密集型耗时1s。获取CPU核数代码:public class ThreadTest {public static void main(String[] args) {int num = Runtime.getRuntime().availableProcessors();System.out.println(num);}}最佳线程数目计算公式:最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。综上:最佳线程数目算法是更准确,但是线程等待时间和线程CPU时间在初始阶段并不是很好预估,一般用经验值就差不多了。再配合系统压测和线上观察,基本可以确定最适合的线程数。线程池监控可以参考一下美团的技术文章(Java线程池实现原理及其在美团业务中的实践 - 美团技术团队 (meituan.com)),也有一些开源的解决方案。线程池参数动态化线程池监控