线程个数到底怎么设置?

线程个数到底怎么设置?,第1张

其实大部分人会说这个问题,傻子才问,实验一下不就知道了。是的实验一下就知道了,但是并不是每个人都愿意动手的。世界上还一种人不傻,但是懒。哥也是其中一员。

之前一直没闹懂cpu核数和线程数的关系什么,我一直以为2核8线程是指:两个物理上的核同时可以处理8个线程。( 这里的同时是绝对意义上的同步处理。 )但是我搜了一下,貌似并不是,之前理解完全错误。

参考:https://zhidao.baidu.com/question/564747175879215284.html

           https://www.cnblogs.com/hitwhhw09/p/4718404.html

最近做个http请求。有点大 几千万次。给我的机器是2核40线程。所以我想啊40线程可以同时处理40个线程,按照网上说的设置2-3倍,让他跑吧。然后我设置了80个,跑了一两天。崩了!带我的那个人更牛逼,直接设置3w个线程。然后觉得慢,就说你去做个试验看看,线程设置多少合适。然后实现数据如下:

connectionTimeOut指http请求超时设置,soTimeOut指等待返回时间超时。我们场景是希望请求获得有效返回。

从试验数据上看,单纯从处理速度,不管suc的话,设置在机器线程数量的10倍左右合适。如果从成功结果上看(抛开超时设置)越接近物理核数设置,请求成功率越高。

具体原因因为大概可以猜到,但是抱着严谨精神,我就不说了(我没查,但是学过计算机组成原理和操作系统,所以大概理解)。希望大家自己去查吧。

尽然数据贴出来了,就结合着数据找点经验吧。抛开 http因素。多核多线程情况下 线程数 设置 为线程数的10倍左右处理速度应该最快。

http请求照顾到成功率情况,request超时设置大点更为合理,根据http 响应服务器来定,我们这个应该2-4s直接合理,response超时设置500足够。线程数量应设置在50-240之间,具体大小应该计算或者再细测获得。

线程是自动调整的,不需要你来手工调整。

优化的文档可以参考edocs里相关的内容。

在控制台上,队列设置里面,有Thread Count、Thread Priority和Queue Length,可以调整一下。另外,backlog也可以调整一下。

提升线程数会在重新启动server后生效,队列长度是执行队列的最大长度,提升线程优先权将导致这个队列cpu优先权超过低优先权线程。

提升线程数有时可以增加应用程序性能,但是在提升数量前,有很多因素需要考虑。设置数量太高会降低服务器性能,在服务器上可以并行处理的线程数取决于服务器硬件的cpu性能,有效的处理器越多,可以给服务器的线程数越多,并且越期望有性能的提高。

你也可以在config.xml中加入8.1 style,用81-style-execute-queues ,配置一下

<server> <name>myserver</name> <ssl> <name>myserver</name> <enabled>true</enabled> <listen-port>7002</listen-port> </ssl> <use81-style-execute-queues>true</use81-style-execute-queues> <listen-address/></server>

1:获取cpu核心数:

Runtime.getRuntime().availableProcessors()

创建线程池:

Executors.newFixedThreadPool(nThreads)//nThreads为线程数

2:这个只要服务器内存够大,CPU核心数较多,处理数据比较强就好了,注意不要一下分配几千个线程,可 能会导致堆栈溢出的,这样程序就挂了,因为线程很费内存资源


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/594687.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-09
下一篇2023-07-09

发表评论

登录后才能评论

评论列表(0条)

    保存