码迷,mamicode.com
首页 > 其他好文 > 详细

每秒处理请求数和并发的关系

时间:2018-08-03 16:42:58      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:线程   info   就是   inf   过程   read   切换   ntp   nbsp   

设平均响应时间为t(单位为毫秒), 并发量为c,每秒处理请求数为q,则: 
q = (1000/t) * c 
就是这个关系; 
想要升高q,就只有两条路:1) 降低t 2) 升高c 
对于‘1‘, 只能靠优化代码实现,只能尽量做,往往提升有限; 
对于‘2‘, 通常c与你服务器程序的请求处理模型有关,如果你服务器程序是“一个线程对应一个请求”的模式,那么c的最大值就受制于你能支撑多少个线程;如果是“一个进程对应一个请求”的模式,那么c的最大值则受制于最大进程数;

在升高c的过程中,不得不注意的一点是,线程/进程数越多,上下文切换、线程/进程调度开销会增大,这会显著间接地增大t的值从而不能让q跟着c的值等比升高, 所以一味增大c通常也不会有好结果,最合适的c值应该根据实测试验得出

另外,还有一种特殊情况:若业务决定了该服务器提供的服务具有“小数据量、较长返回时间”的特征,即这是一个不忙、但很慢的业务类型,那么可以采用NIO模式提供服务,比如nginx默认就采用nio模式; 
在这种模式下,c值不再与线程/进程数相关,而仅仅与“socket连接数”相关,通常“socket连接数”可以非常大,在经过特殊配置的linux服务器上,可以同时支撑百万级别的socket连接数,在这种情况下c可以达到100w; 
在如此高的c值之下,就算t再大,也可以支撑出一个很高的q,同时真正的线程/进程数可以只开到跟cpu核数一致,以求最大化cpu利用率; 
当然这一切的前提是该业务具有“小数据量、较长返回时间”的特征

 

并发量是当前保持的连接数

 netstat -ntp | grep -i "6661" | wc -l
(No info could be read for "-p": geteuid()=512 but you should be root.)
89

技术分享图片

每秒处理请求数和并发的关系

标签:线程   info   就是   inf   过程   read   切换   ntp   nbsp   

原文地址:https://www.cnblogs.com/austinspark-jessylu/p/9414464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!