最近看网课的时候学习到了几篇专门讲解高性能服务器设计的切入点,结合demo代码在此进行总结。
1.代码逻辑异步设计
异步是一种开发设计的思想,异步设计代码可以解决同步逻辑中可能出现的某一个流程需要进行io等待等操作,但后续流程并不完全需要等阻塞掉的流程返回结果也可以执行时,让后续逻辑代码异步执行,无需等待阻塞流程返回即可执行后续逻辑。这样可以充分利用cpu,防止服务器明明cpu大部分之间都在空闲状态但因为io等待的时间较长导致吞吐率下降。
2.使用高性能IO
即使用io多路复用这种同步非阻塞的io模型,提高服务器的io处理效率,虽然多路复用的io模型也是同步的io需要进行等待,但这个模型可以一个线程处理多个io请求,而不用一个请求生成一个线程去处理。
3.高性能序列化
在网络中数据都是以字节流的形式进行传输,所以设计与使用一种性能更高的序列化方式对于性能也有很大的提高
4.网络传输协议
在网络传输中使用双工通信协议可以获得比单工通信更高的吞吐量
5.Demo程序
因此结合上面的技术点,我写了一个demo程序,逻辑是两位大爷在街上碰到进行对话。这里对反应了上面得设计思想得地方进行总结
首先是序列化协议的设计,这里设计了一种专用的序列化方案,即直接将对象按照固定的字段顺序进行序列化,大大减少了序列化后的字节数,虽然适用性不高,但是却可以有更好的性能
然后是异步逻辑的设计,这里在接收到消息进行回复时直接使用golang中的routine完成io写入的操作,无需等待写入完成就可以进行下一条消息的接收。
最后是双工通信方式,无论是客户端还是服务端都可以同时进行消息的接收和回复,而不是单工通信中一次通信只有一方在发送一方在接收,大大提高了通信的效率
项目地址:https://github.com/a975429250/ZLTalk
有疑问加站长微信联系(非本文作者)