客户端异步、服务端异步与并发事务处理数、连接数的关系【重点】

如果想不过来,可以想1条连接的并发数、连接数

 

 

  服务端同步 服务端异步
客户端同步

服务端无论同步异步,效果是一样的

想象一下1条连接的情况下,服务端同一时刻只有1个req被客户端发送到并处理

1条连接在处理完并写回前,永远不会收到第2个req

tcp(netty)的调用同步化(异步阻塞)及与http协议、浏览器关系 客户端同步的经典案例

线程池的取值(二)设计吞吐量【重点】 客户端强制同步模拟压测并发数

 同 同步

https://www.jianshu.com/p/890525ff73cb 开发了一个纯异步的redis客户端

客户端异步

并发数==连接数

服务端1条连接,同一时刻只有1个事务被处理,

连接处理阻塞在处理事务而不会去读第二个req

netty 是否要开启业务线程池

并发数>连接数

服务端1条连接,由于异步,可能处理多于1个的req,

甚至有可能第2个req先于第1个req处理完并写回客户端

netty 是否要开启业务线程池

 

用厕所坑位来举例

比如有4个小房间4个坑位,门就是连接通道

起初,门口阿姨一个一个放人进去,出来一个进去一个,这就是客户端同步,并发数最多==门(连接)数==4

过了一段时间,门口阿姨阿尔茨海默了,人没出来就放进去了,但每个房间只有一个坑,放进去的人就站在门口等,此时同时处理事务数仍然==坑位(连接)数==4;这种搞法有个问题,总有一天门被挤爆了,对于netty而言netty 是否要开启业务线程池),要么tcp接收缓冲区窗口挤满,要么接收区直接内存爆掉;对于异步投递线程池,线程池的取值(二)设计吞吐量【重点】 组合设计qps【重点】 ,即是任务队列爆掉

又过了一段时间,发现小房间里面有个小门,尼玛还有个暗格,里面有个大房间可以随时随地,小房间只起一个通道的作用,大房间的人(并发)数远大于坑位(连接)数4

 

 

 

netty爆掉:

因为netty的链路会自己读内核,内核永远可以接收数据,tcp内核缓冲区-netty堆外缓存-堆内-handler

1)handler处理慢的话,对外内存爆掉,如上述中间那幅图

2)用业务线程,迟早如上述右边图

相关 :

netty设置socket用户缓冲区

netty 是否要开启业务线程池

 

posted on 2020-01-07 13:56  silyvin  阅读(943)  评论(0编辑  收藏  举报