跨平台高效HTTP队列实现方案之内存池基础组件.

来源:互联网 发布:淘宝直播粉丝可以买吗 编辑:程序博客网 时间:2024/05/07 05:19
内存池技术大致方案都是提前开辟一定空间的内存,以供程序使用,避免内存碎片对系统分配后续内存的影响,不但能够提高操作系统的效率,减少实际内存开销,同时也提高了程序本身的效率,因为使用malloc从系统获取内存和从内存块获取某个空间的指针的时间周期是不一样的。

这里要介绍的内存池组件是基于pjlib库中的组件,内存池组件的方案在网上找找也有好几种,pjlib库中的个人觉得还是比较不错的,基于可增量的固定块大小,以链表管理的可扩展队列方案。可增量的固定块大小,指的是内存块大小开辟时是固定的,但是可根据不同需求进行增量扩展,比如:64K/128k/256k/512k/1024k,根据需求来决定使用哪个大小的块,如果使用过程块中空闲内存不足,可以新建内存块,以链表形式管理。

经过整合后,我将基础组件都增加了对内存池的支持,包括封装的数组容器(string/vector/hash)、线程、锁、timer等,在此基础之上,使用之前所介绍的线程池技术,同时增加对sock连接的复用管理,实现了一个对内存要求较低、可复用连接的HTTP实现方案(不过仅实现http的get/post能力),同时提供了一种文件缓存方案,使用该方案时,除了请求数据会占用内存空间,接收的数据都以文件形式存储在磁盘当中。经过一定量的测试,只需要4k内存开销,即可实现1次HTTP请求,并且如果对于不需要同时进行HTTP请求的场景,4K内存将不会增长,因为这4k内存将复用,同时sock连接将被保持,效率有明显提升.

此内存池方案同时增加对内存分配和释放的跟踪,以检测内存泄露问题.

后续资料逐步更新,包括源码,将同时奉上.

0 0
原创粉丝点击