“我从盖茨身上学到很多有益的东西,而树立雄心壮志是其关键.在这个问题上,
盖茨将这样说:'当你考虑某一个问题时,千万不要从数百万的级别去考虑它,
而是应该从数亿的级别去考虑.'”
本文出自: 阿呆 http://blog.csdn.net/davemin
宣传: VC 十年技术群 30107096 欢迎高手加入,本群只研究VC
问题: Memory pool 要求 thread safe, 导至性能降低, 如何解决这个问题?
情况A. 参看了数个memory pool 的实现, 很多是换掉了全局的申请内存的宏. 直接使用全局的memory pool 来申请和释放内存.
情况B. 另外memory pool 多半是被服务器端使用, 而且往往是多线程,很可能是非常多的线程同时工作.
然而,话又说回来, 线程thread safe 非内核级实现, 性能上不至于太差. 内核级的互斥对象如mutex 之类的性能就差到极限了.
情况C. 还有一个, 就是使用memory pool来分配或者是释放内存, 也是需要时间的. 不要以为不使用系统的HeapAlloc就会节约时间, 是的, 节约时间了,但内存池本身的大小实现机制,还是决定了其任何一个工作是需要花销相当时间的.
具体花销时间的情况,我需要测试几个memory pool的实现才能了解,但我事先已经测试过自己实现的内存池的工作情况.
综上A, B, C 三种情况,
这里就存在一起严重的问题, 如果线程数较多,如果申请和释放内存频率比较高, 那么会严重导至性能降低.
因为只能同时有一个线程在申请内存. 或者是删除内存. 这个功能只能同时单线程进行.
如果我们又应用盖茨的话: 从数亿的级别去考虑 , 那么这个事情将会变的如何呢? 重要参数: 线程数量+申请/释放内存的频率
宣传: VC 十年技术群 30107096 欢迎高手加入,本群只研究VC
关于我是如何处理这个问题, 以及具体的性能测试数据是怎么样的.
留待研究与后续了.