我正在Windows上开发服务器。我的服务器使用IOCP套接字和一个数据库。通常的情况是用户连接并保持长时间连接。连接的用户可以从服务器请求一些数据。通常,请求与数据库访问关联。客户端请求消息的长度是可变的。邮件带有google protobuf数据包,并在每条邮件之前发送固定长度的标头。
关于内存管理,我可以做些什么,而不是使用通常的new / delete函数来加快服务器的速度?我现在唯一的想法是拥有一个头缓冲区池并重用它们,而不是经常分配/取消分配它们。您如何看待每个用户的单独堆,因此在断开用户连接时,我可以一次删除所有用户数据,而不必使用大量的delete调用?有关此主题的任何技巧或窍门,不胜感激。
谢谢。
缓冲区池是一个好主意,我倾向于拥有一个“缓冲区分配器”对象,所有连接共享该对象,并且可以为I / O目的分配固定大小的缓冲区。最好在连接级别进行池化(即,每个套接字都有一个较小的池以供重用),因为这样可以减少共享分配器上的交叉连接争用。
每个连接一个堆似乎是解决该问题的重量级解决方案。
我有一些代码可以从此处下载,以演示共享缓冲区分配器方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句