当前位置: 首页 > article >正文

java线程池参数设置原则

线程池参数设置原则

1 如何为线程池设置合适的线程参数?

目前根据一些开源框架,设置多少个线程数量通常是根据应用的类型**:I/O 密集型、CPU 密集型。**

  • I/O密集型
    • I/O密集型的场景在开发中比较常见,比如像 MySQL数据库读写、文件的读写、网络通信等任务,这类任务不会 特别消耗CPU资源,但是IO操作比较耗时,会占用比较多时间;
    • IO密集型通常设置为 2n+1,其中 n 为 CPU 核数;
    • 说白了,对于i/o密集型的场景,不太占用cpu资源,所以并发的任务数大于cpu的核数,这样的话能更加充分的利用CPU资源;
  • CPU密集型
    • CPU密集型的场景,比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,这些场景大部分都是纯 CPU计算;
    • CPU密集型通常设置为n+1,这样也可避免多线程环境下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;

在这个过程中,如果设置或者使用不当,容易造成内存溢出问题,同时如果设置了无界队列,那么线程池的最大线程数也就失去了意义;

所以企业开发中会命令禁止使用默认的队列长度


http://www.kler.cn/news/332983.html

相关文章:

  • netty之SpringBoot+Netty+Elasticsearch收集日志信息数据存储
  • Nginx部署前端Vue项目的深度解析
  • k8s 之常用命令
  • pnpm install的时候失败提示python问题
  • 【Docker从入门到进阶】06.常见问题与解决方案 07.总结与资源
  • 机器学习 | Scikit Learn中基于随机森林的OOB误差计算
  • HarmonyOs 查看官方文档使用弹窗
  • 网站服务器在不同操作系统上监听端口情况的方法
  • NVIDIA Hopper解说
  • 检查cuda和显卡的可用性
  • android 原生加载pdf
  • 精品WordPress主题/响应式个人博客主题Kratos
  • MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态
  • 仿RabbitMQ实现消息队列服务端(一)
  • 【Android】动画
  • 【每天学个新注解】Day 15 Lombok注解简解(十四)—@UtilityClass、@Helper
  • PyPattyrn:Python中的设计模式库
  • Windows UAC权限详解以及因为权限不对等引发软件工具无法正常使用的实例分析
  • (12)MATLAB莱斯(Rician)衰落信道仿真2补充:莱斯衰落信道与莱斯随机变量
  • vscode环境迁移