如果你只想知道结论,请直接跳到第2章。
假设系统的应用由前端和后端两部分组成,前端模块接收用户请求,转发给后端模块;后端模块处理请求,把结果返回给前端;前端再把结果转发给用户。
不太严谨地说,如果前后端操作在同一个线程里进行,则称同步计算;如果前后端操作分别在两个线程里或两个进程里进行,两者通过消息队列或其它方法通信,则称异步计算。
解题的思路是:
3.然后进行比较
各项量值的假设:
1.为了简化问题,我们假设前后端操作的最大并发数都是1。
2.对于一个请求,前端转发请求需100ms,后端处理需200ms,前端转发结果需100ms.
并发数=2,即同时有两个请求。我们分别用“请求1”和“请求2”来指代它们,并假设“请求1”先到达系统。
同步计算时,请求1在执行结束前不会释放任何资源;请求2必须等请求1结束才能开始执行。
同步计算时,请求1进入后端处理后可以释放前端资源,这时请求2可以占用它。
同步计算
400
800
600
异步计算
500
分析:
1.同步模式下,请求2须等待请求1全部执行完毕才能开始执行,因为请求1在全部执行完毕前不会释放前端资源
采用上述分析方法,可以得到相同的比较结果。限于篇幅,这里就不给出具体的图表和数据了。
OK,到这里可以给出总体结论了。
a)同步计算时,一个请求总是要等到全部完成后才一次性释放所有资源,导致下一个请求的长久等待
4.综上可推论得知,若系统的并发数较低,异步计算对性能没什么作用
5.另外可以看出,在同步计算时各请求的串行度较高,异步计算时各请求的并行度较高;
1.如果我没弄错的话,这种问题应该属于“排队论”的研究领域;你可以找本“排队论”的书看看,应该能够找到严格的数学论证过程和具体的吞吐量公式。
THE END