专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

并发较高怎么设置多线程数量_java

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 22:20:19       共计:3602 浏览

并发较高怎么设置多线程数量?

这个需要根据具体任务和机器性能来综合考虑,通过不断的性能测试,分析出最佳线程数量。

1.CPU密集型:cpu利用率较高,设置线程数量和cpu核心数一样即可。使cpu得到充分利用。

2.IO密集型:IO密集型,主要进行长时间的IO操作,cpu利用率不如cpu密集型高,一般设置线程数为CPU两倍。

如何来设置:

a.需要几个数据来计算

tasks:每秒的任务数,假设为500~1000

taskCost:每个任务需要花费的时间,假设为0.1s

responseTime:系统允许的最大响应时间,假设为2s

b.计算过程

--corePoolSize=每秒需要的线程数?

threadCount=tasks/(1/taskCost)=tasks*taskCost=(500~1000)*0.1=50~100个线程。corePoolSize的个数应该大于等于50。根据8020原则,如果每秒80%的时间执行200个任务,那么corePoolSize设置为80即可。

--queueCapacity=(coreSizePool/taskCost)*responseTime

计算可得queueCapacity=(80/0.1)*2。意思是队列里的线程可以等待2秒,超过了就需要开新的线程来执行,千万不能设置为Integer.MAX_VALUE,这样队列会很大,线程数只会保持在corePoolSize大小,当任务陡增时,不会开新的线程来执行,响应时间也会陡增。

--maxPoolSize=(max(tasks)-queueCapacity)/(1/taskCost)

计算可能maxPoolSize=(1000-80)/10=92,(最大任务数-队列容量)/每个线程每秒处理的任务数=最大线程数

--rejectedExecutionHandler:根据具体情况来决定,任务不重要可以丢弃,也可采用排队等策略

--keepAliveTim和allowCoreThreadTimeout通常采用默认值就可以

c.上面的计算都是理想的情况,在实际生产中,还要根据机器的性能,升级机器硬件来处理高并发产生的任务数

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:你认为你最应该提升的是哪个方面_python | ·下一条:青岛的python岗位什么时候能多起来_python

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有