Spring Boot项目的线程池应该怎么配置?合适的参数,就是 ThreadPoolTaskExecutor 的参数。
核心线程数量、最大线程数量、排队数量、其它——比如拒绝策略。
线程数量 的设置 和 JVM的内存 设置有关系吧?比如,JVM内存为 16MB,线程数量应该不会太大,否则会爆掉吧。
之前做了此简单的测试,新建了2万多个线程JVM就死掉了,JVM内存配置了十几个MB。
要是JVM配置 512MB、1GB,或许,线程数量可以达到 万级、十万级?此时,线程切换会不会耗费大量资源呢?是否又和 电脑的CPU核心数量 有关系了?
期待一个 综合性的回复(最佳实践啦),谢谢!
线程池建多少个线程,跟cpu的核数有关系,一般都是cpu的核数两倍多一点,再多就是排队了,有个最大排队数量,
要是这样的话,ThreadPoolTaskExecutor 的线程数量就 只能设置为很小的值了。
只要不是 超级计算机、分布式计算机,一般电脑只有几个到几十个核心吧?
要是只设置这么少的线程数量,怕是 无法满足业务需求的。
@工程师二号: 你多大的并发量 ,一般都是分布式,多服务器
@不知道风往哪儿吹: 千、万……
在我目前的一个场景中,是需要 通过 并发执行提高 前端接口 的 响应效率:
并发执行 多个任务。
这样,返回数据时,就是 耗时最长任务的时间了,,而不是串行。此时需要多个线程。
写这个问题,大家讨论下嘛
@不知道风往哪儿吹: 谢谢了!
@工程师二号:
要想合理地配置线程池,就必须首先分析任务特性,可以从以下几个角度来分析。