营销网站建设联系方式,黑龙江省建设教育网站,创业平台是干什么的,厦门做网站优化多少钱线程池参数设置原则
1 如何为线程池设置合适的线程参数#xff1f;
目前根据一些开源框架#xff0c;设置多少个线程数量通常是根据应用的类型**#xff1a;I/O 密集型、CPU 密集型。**
I/O密集型 I/O密集型的场景在开发中比较常见#xff0c;比如像 MySQL数据库读写、文…线程池参数设置原则
1 如何为线程池设置合适的线程参数
目前根据一些开源框架设置多少个线程数量通常是根据应用的类型**I/O 密集型、CPU 密集型。**
I/O密集型 I/O密集型的场景在开发中比较常见比如像 MySQL数据库读写、文件的读写、网络通信等任务这类任务不会 特别消耗CPU资源但是IO操作比较耗时会占用比较多时间;IO密集型通常设置为 2n1其中 n 为 CPU 核数;说白了对于i/o密集型的场景不太占用cpu资源所以并发的任务数大于cpu的核数这样的话能更加充分的利用CPU资源 CPU密集型 CPU密集型的场景比如像加解密压缩、计算等一系列需要大量耗费 CPU 资源的任务这些场景大部分都是纯 CPU计算;CPU密集型通常设置为n1,这样也可避免多线程环境下CPU资源挣钱带来上下文频繁切换的开销
2 如何获取当前服务器的cpu核数
int cors Runtime.getRuntime().availableProcessors();3 无界队列问题
实际运行中我们一般会设置线程池的阻塞队列长度如果不设置则采用默认值
private int corePoolSize 1;
private int maxPoolSize Integer.MAX_VALUE;
private int keepAliveSeconds 60;
private int queueCapacity Integer.MAX_VALUE;在这个过程中如果设置或者使用不当容易造成内存溢出问题同时如果设置了无界队列那么线程池的最大线程数也就失去了意义
所以企业开发中会命令禁止使用默认的队列长度