美文网首页
一种估计服务器线程个数的方法

一种估计服务器线程个数的方法

作者: 定金喜 | 来源:发表于2020-06-13 23:49 被阅读0次

1.估计线程数存在的难点

线程个数越多,线程切换频繁,会浪费资源在线程切换上面;线程个数少无法充分利用cpu资源,也会造成资源浪费,所以在实际中我们一般会设置一个大概的数值,但是这个数值具体是怎么计算出来的也没有一个合理的算法,所以本文参考一些文章提供一种近似估计服务器需要设置的线程个数的方案。

2.服务器类型

交互型:客户端和服务端交互较多,每次交互cpu需要消耗的时间较少,大部分时间等待在线程切换和网路传输上
计算型:客户端和服务端交互很少,例如定时任务服务器,大部分时间是消耗在cpu计算上

3.估算线程个数

官方计算公式:
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

计算型服务器因为 线程等待时间<<线程CPU时间,所以线程等待时间可以忽略不计,所以这种服务器的最佳线程数目等于CPU数目

交互性服务器:因为涉及到很多的接口,每个接口的等待时间和cpu时间不一定相等,甚至相同的接口也有细微的差别,根据网络情况和服务器情况有关,所以我们主要估计这种服务器需要设置的线程个数。

具体估计方案:
假设我们的服务器中有三个接口,这三个接口为:
查询用户详情
查询订单信息
查询账单信息
通过后台的监控系统我们可以统计到这三个接口的调用次数为100,200,700,所以我们知道这三个接口的调用比例为1:2:7,我们可以通过编写测试压测程序分别对接口按比例进行测试调用,可以统计出每个接口的平均响应时间,假设分别为1s,2s和3s,这里的响应时间包括等待时间+cpu时间,在后端程序代码通过AOP统计出每个接口的平均cpu时间,假设分别为100ms,200ms和400ms。

应用平均响应时间 = 1/101+2/102+7/103=2.4s
应用平均cpu时间 = 1/10
100+2/10200+7/10400=330ms=0.3s
服务器的cpu核数 = 8

所以我们可以估计出最佳线程数目为:2.4/0.3*8=64

这是一种近似估计方法,但是实际中随着线程数量的增加,测算出的结果可能会有误差,所以一般会将上述计算出来的线程个数按90%或者80%来作为最终结果。

相关文章

  • 一种估计服务器线程个数的方法

    1.估计线程数存在的难点 线程个数越多,线程切换频繁,会浪费资源在线程切换上面;线程个数少无法充分利用cpu资源,...

  • Android 多线程探索(三)— 线程池

    构建服务器应用程序的有效方法 — 线程池 为什么使用线程池? 每次通过 new Thread 创建线程并不是一种好...

  • 锁的可重入性

    方法getHoldCount()的作用是查询当前线程保持此锁定的个数。 方法getQueueLength()的作用...

  • 线程池原理详解及如何用C语言实现线程池

    线程池是一种多线程处理形式,大多用于高并发服务器上,它能合理有效的利用高并发服务器上的线程资源;线程与进程用于处理...

  • 补充

    补充 pipreqs: 函数和方法 threading.local 多个线程修改同一个数据,复制多份变量给每个线程...

  • 游戏服务器启动多少个线程合适

    线程是服务器的一种希有资源,它的创建,销毁,切换都需要很多服务器的其它资源。而在游戏服务器中,只要没有在多线程之间...

  • HTTPUTIL

    在网络请求中开启新线程,服务器响应的数据无法进行返回,因为所有耗时的逻辑都是在子线程里进行,请求方法会在服务器没来...

  • NSThread

    NSThread 创建线程 代码实现(创建线程的四种方法)创建线程的第一种方法:1.创建线程对象[[NSThrea...

  • wait会立即释放锁,notify等synchronized代码

    实现一个容器,提供两个方法,add,size,写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,...

  • 高并发面试之多线程实例

    实现一个容器,提供两个方法,add,size。写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,...

网友评论

      本文标题:一种估计服务器线程个数的方法

      本文链接:https://www.haomeiwen.com/subject/moqtxktx.html