一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
来源:互联网 发布:今日头条数据 编辑:程序博客网 时间:2024/05/05 16:29
最近看代码,感慨很多。作一个高性能的网络通信模块,除了要选择高性能的网络通信模型之外,同样重要的就是:你的内存(缓冲区)是如何管理的。
在网络通信模型方面,现在的技术都是比较成熟的了,在win下使用iocp,在linux下使用epoll。它们的使用方法,相对来说,还是比较有章可循的。
内存之于高性能,大致有以下两个方面需要特别注意:
1.尽可能地减少内存的动态申请和释放;
2.尽可能地减少内存数据的复制;
解决第1个问题,我们可以使用内存池;而解决第2个问题,就会牵涉到程序的架构设计了。
理想的情况是:
在数据接收方面,一个包,只要从网络模块接收下来后,直到它被上层逻辑使用完毕之后才会丢弃,而不应该在网络接收模块和上层逻辑模块之间增加任何的有关复制该包的行为和操作;
在数据发送方面,发送的时所用的缓冲区,不应该是即时申请的,而是从内存池中取的可用缓冲区,用完后再放回。
而我们看到,对于前者,也只有在架构方面作一些精巧布局才能达到目的。
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 网络通信,其实就是在作内存(缓冲区)管理
- 内存流问题---APUE程序5-15,对内存流的写入是如何在我们自己提供的缓冲区上操作的
- 作协议作规则就是做人的工作
- 测试在多线程下操作sqlite内存数据库(转)
- 测试在多线程下操作sqlite内存数据库
- WebRTC第三步:在客户端用shadowsocks作网络代理
- 普天之下,最好的工作就是作程序员
- 管理其实就是借力
- 用acegi作权限管理
- Flex RSL作资源共享管理
- Flex RSL作资源共享管理
- nfs网络文件系统作共享
- 发布一个List记录查找Web Part: PowerSearch v1.0
- 一个严蔚敏老师网站的备份网站
- IOCP中的socket错误和资源释放处理方法
- 展开BOM
- jbpm与星期二
- 一点感慨:作网络通信,其实就是在作内存(缓冲区)管理
- 调试SharePoint web part时, 如何可以多个人同时启动调试?
- 网络游戏中的数据包设计与定义(初论)
- SharePoint:DataView如何绑定Web Service返回的主从表数据集
- 邮件列表正在讨论QQ的架构问题
- 如何只用HTML画出一个圆角的Table表格?
- 组合处理
- 初尝结对编程的甜头
- 做文章系统时, 如何让长篇的文章自动换行