- 博客(8)
- 收藏
- 关注
原创 IOCP 生存期管理
从2004年使用iocp开始,尝试过很多种client生存期管理,最初使用一个锁userlock,在sendcomp和recvcomp以及senddata等都用一个锁,而且是进去的地方就开始锁,这种方式最简单,也产生了最初的版本,之后为追求更高效率,慢慢演变为使用两个锁,readlock和writelock,再之后演变为send使用一个锁,recv使用interlockedxxx,再之后演变为se
2010-02-23 10:44:00 1450
原创 线程关联内存池再提速
5、线程关联内存池再提速 上一节已经提到问题,解决办法是这样的struct tm_bufunit{ tm_pool *pool; //pool指针 union { tm_bufunit *next; //下一个块指针
2010-02-04 16:57:00 3723 2
原创 线程关联的内存池
4、线程关联的内存池 每每想到单线程下内存池飞一般的速度和多线程下蜗牛一般的速度我就不能原谅自己,为什么差这么多,就不能让多线程下内存分配更快一点吗?解决方法有了,那就是让缓存线程化,各个线程有自己私有的缓存,分配的时候预先从当前线程私有缓存分配,分配空了的时候去全局free表取一组freeunit或直接向系统申请一大块缓存(各个线程缓存完全独立),不管具体采用什么方式,速度都大幅度的提高
2010-02-04 16:56:00 5100 1
原创 dlmalloc、nedmalloc
3、dlmalloc、nedmalloc Dlmalloc、nedmalloc等知名分配器估计搞内存池的人都知道,dlmalloc是单线程的,不考虑锁,nedmalloc是多线程的,带锁,其实nedmalloc也是线程缓存式的内存池,具体实现我就不说了,nedmalloc我大致看了一下,dlmalloc我也没有深入分析过。 关于两者分配性能前面都提到过,就不再说了,如果不想自己研究
2010-02-04 16:55:00 15916 3
原创 多线程内存池
2、多线程内存池 上一节很简略的说了下单线程内存池,单线程内存池如果要放在多线程环境下使用是不安全的,我们需要进行保护,如何保护,最简单的方法就是加临界区,云风的实现里面是用原子操作模拟一个临界区,我实测跟临界区性能非常接近,甚至很多时候不如临界区,所以我就不追求用原子操作模拟临界区了,还是直接用临界区最简单。 class CMemPool {public:
2010-02-04 16:54:00 7824
原创 单线程内存池
1、单线程内存池 内存池的基本思想是大块向系统申请内存,内部切割为小块,内部cache之后有选择的分配,不够的时候继续向系统大块申请内存,示例代码如下: struct tm_memblock{ tm_memblock *next;};class tm_pool{… tm_bufunit *next; //p
2010-02-04 16:53:00 4039
原创 0、内存池之引言
0、内存池之引言 这是关于内存池的一系列简短文章,当然它不是短期的研究结果,而是长期使用经验的总结,介绍得可能不会很详细,一些别人介绍得很细节的东西我就基本掠过。转载请署名作者:袁斌 内容如下:1、 单线程内存池。2、 多线程内存池。3、 Dlmalloc nedmalloc4、 实现线程关联的内存池。5、 线程关联内存池再提速。 关
2010-02-04 16:49:00 3667
原创 lua不同写法速度差别很大
前些天无意中在网上看到一篇文章,写的是几种脚本语言以及c的速度比较,大意是测试下来lua的速度很慢,只相当于c的1/60左右,看了一下测试函数,如下(命名版本1): tkstart = os.clock() local count = 10000000local accumv = 34.5;local function iterate (times,accumv)
2010-02-03 17:14:00 4492 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人