java每秒处理1000个请求_每秒处理请求数和并发是⼀个概念
吗?
不是同⼀个概念,但它们之间有联系:
设平均响应时间为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利⽤率;
一个线程可以包含多个进程当然这⼀切的前提是该业务具有“⼩数据量、较长返回时间”的特征

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。