在Gateway中通过判断加速协议protocolAccelerate判断是否预先对数据进行encode(preEncodeForClient),我想问的是,在这里预先对数据进行encode,和在连接上发送数据时对数据进行encode有什么区别?
预先协议编码有助于提升系统性能,主要是在群发以及广播时降低cpu消耗提升性能以及包合并减少网卡压力。
减少cpu消耗: 如果不预先协议编码,群发时每个客户端都要根据每个客户端协议编码一次。举个例子:假如广播给1W个客户端,那么就要编码1W次,消耗会很大。如果预先协议编码,那么不管广播给多少人一次广播只是编码一次。
降低网卡压力: 预先编码的另外一个好处就是可以合并数据包,大大减少网卡出包量,大大降低网卡压力。 比如每秒向1W个客户端广播100条数据,正常情况网卡每秒要向外发送100W个包,这种情况就可以建立一个每秒发送一次的缓冲队列,将1秒内的数据包通过预先编码合并成一个包,然后再广播发送。那么网卡的出包量将会从100W/S降低到1W/S。网卡压力成指数型降低。另外因为包合并,send的系统调用也将从100W/S降低为1W/S,也会大大降低cpu消耗。
明白了,谢谢
预先协议编码有助于提升系统性能,主要是在群发以及广播时降低cpu消耗提升性能以及包合并减少网卡压力。
减少cpu消耗:
如果不预先协议编码,群发时每个客户端都要根据每个客户端协议编码一次。举个例子:假如广播给1W个客户端,那么就要编码1W次,消耗会很大。如果预先协议编码,那么不管广播给多少人一次广播只是编码一次。
降低网卡压力:
预先编码的另外一个好处就是可以合并数据包,大大减少网卡出包量,大大降低网卡压力。
比如每秒向1W个客户端广播100条数据,正常情况网卡每秒要向外发送100W个包,这种情况就可以建立一个每秒发送一次的缓冲队列,将1秒内的数据包通过预先编码合并成一个包,然后再广播发送。那么网卡的出包量将会从100W/S降低到1W/S。网卡压力成指数型降低。另外因为包合并,send的系统调用也将从100W/S降低为1W/S,也会大大降低cpu消耗。
明白了,谢谢