`
阿尔萨斯
  • 浏览: 4173497 次
社区版块
存档分类
最新评论

一点感慨:作网络通信,其实就是在作内存(缓冲区)管理

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

  最近看代码,感慨很多。作一个高性能的网络通信模块,除了要选择高性能的网络通信模型之外,同样重要的就是:你的内存(缓冲区)是如何管理的。

  在网络通信模型方面,现在的技术都是比较成熟的了,在win下使用iocp,在linux下使用epoll。它们的使用方法,相对来说,还是比较有章可循的。

  内存之于高性能,大致有以下两个方面需要特别注意:
  1.尽可能地减少内存的动态申请和释放;
  2.尽可能地减少内存数据的复制;

  解决第1个问题,我们可以使用内存池;而解决第2个问题,就会牵涉到程序的架构设计了。

  理想的情况是:

  在数据接收方面,一个包,只要从网络模块接收下来后,直到它被上层逻辑使用完毕之后才会丢弃,而不应该在网络接收模块和上层逻辑模块之间增加任何的有关复制该包的行为和操作;

  在数据发送方面,发送的时所用的缓冲区,不应该是即时申请的,而是从内存池中取的可用缓冲区,用完后再放回。

  而我们看到,对于前者,也只有在架构方面作一些精巧布局才能达到目的。




分享到:
评论

相关推荐

    c语言中内存缓冲区的建立,并在缓冲区中动态分配内存

    通过文件中的mm.h文件,编写c程序时,把mm.h文件包含在头文件中,就可以调用里面的提供的函数,建立内存缓冲区,并可以通过mm.h中实现的函数对这个内存缓冲区进行动态的分配内存。

    Sybase内存和缓冲区管理

    SQL Server启动时将内存分配给SQL Server可执行代码,SQL Server使用的静态内存,用户可配置参数占用的内存及不驻留在缓存上的数据结构,剩余的内存分配给两种SQL Server缓冲区即:数据缓冲区和过程缓冲区。...

    C++实现的共享内存缓冲区

    将共享内存操作封装成C++类,通过信号灯semaphore进行进程同步。可以像操作普通缓冲区那样操作共享内存,实现进程间通信 编译时需要添加-lrt编译选项

    c#环形内存缓冲区源码

    频繁操作内存时为防止内存碎片可使用这个环形缓冲区。

    Linux内核缓冲区管理

    Linux内核缓冲区管理 Linux内核缓冲区管理 Linux内核缓冲区管理

    基于linux用户态可自控缓冲区管理设计与实现

    为了避免创建缓冲区的过程中,由于多次...研究结果表明:在基于零拷贝的集群并行通信系统中,采用该缓冲区管理机制的设计满足了网络通信系统的应用需求,该方法是一种高效的、可靠的、具有实时性的可兼容的缓冲区管理机制。

    linux内存和缓冲区完美教程大全

    应大家要求上传。可嵌入到工程上的C语言实现的内存泄漏检查代码!!!!!!!!!...深入理解LINUX内存管理学习笔记。常见的内存错误。以及缓冲区缓冲区溢出攻击:原理,防御及检测,并给出全部代码以及ppt

    Linux内核Slab内存缓冲区管理器.pdf

    Linux内核Slab内存缓冲区管理器.pdf

    Linux内核缓冲区管理 ppt

    Linux内核缓冲区管理 ppt 本人制作的操作系统讲稿,感觉讲的还比较清晰,希望对你有帮助

    Cesium 绘制缓冲区 点 线 面缓冲区

    Cesium 绘制缓冲区 点 线 面缓冲区 预览:http://dongnan185.com:8083/videos/draw.mp4 启动:npm i npm run serve

    6.2.创建共享内存写入数据到缓冲区

    6.2.创建共享内存写入数据到缓冲区

    探讨Oracle数据缓冲区内部机制

    在调节数据库的时候,你的目标就是为数据缓冲区分配尽量多的内存,而不会导致数据库服务器在内存里 分页。数据缓冲区每小时的命中率一旦低于90%,你就应该为数据块缓冲区增加缓冲区。在本文Oracle高级教程里,会探讨...

    环形缓冲区 封装模板类

    | 在缓冲区的元素:int CircleBuffer&lt;类型名&gt;::count() //返回当前在缓冲区的元素的个数 | 判断是否为空: bool CircleBuffer&lt;类型名&gt;::empty() //判断缓冲区是否为空 |________________________________________...

    论文研究-一种自适应的嵌入式协议栈缓冲区管理机制.pdf

    为避免创建缓冲区过程中必须指定大小和多次释放而导致...在基于研究平台S3C44B0X的Web server网络数据监控系统上的测试结果表明,该缓冲区的设计满足嵌入式系统网络通信的应用需求,是一种高效、可靠的缓冲区管理机制。

    C语言输入缓冲区完全攻略!

    所有从键盘输入的数据,不管是字符还是数字,都是先存储在内存的缓冲区中,叫作“键盘输入缓冲区”,简称“输入缓冲区”或“输入流”。需要注意的是,对于 %d,在缓冲区中,空格、回车、Tab 键都只是分隔符,不会被 ...

    内存缓冲池的实现

    内存缓冲池的实现,用链表实现的内存分配与释放

    高速通信下环形缓冲区设计及实现

    1.高速通信下,环形缓冲区设计及实现;可直接使用演示。 2.包括:服务端和客户端。说明:SOCKET通信非常简略,只为环形缓冲区测试使用,也适合初学都学习。 其他:里面包含SOCKET通信客户端/服务器演示,还包括了...

    linux内核缓冲区管理

    概括介绍Linux的缓冲区管理,对linux的缓冲区管理进行说明,以pdf格式发布ppt格式的文件

    基于linux用户态可自控缓冲区管理设计与实现1

    摘要:为了避免创建缓冲区的过程中,由于多次释放和重新分配内存而导致可能的内存泄露和内存浪费等弊端,采用一种基于用户态的可自行调控的缓冲区管理机制,该管理机制是基

Global site tag (gtag.js) - Google Analytics