posts - 3,  comments - 0,  trackbacks - 0
  2009年10月24日
test
posted @ 2009-10-24 01:35 thinke365 阅读(82) | 评论 (0)编辑 收藏
  2009年7月30日
通常采用malloc和free来管理内存,但是容易造成内存碎片,反而加重操作系统内存管理的负担。 memcached底层的内存管理机制,使用了slab
slab的基本思想,是把内存划分为一定大小的块,并把尺寸大小相同的块划分为组。
slab还有重复使用已分配内存的功能,也就是说分配的内存不会被释放,只会被重复利用。这就减少申请和销毁内存所消耗的时间?
memcached维护着一个空闲slab块列表,存数据的时候,会选择一个最合适的块,存入数据。(这个列表会有多大? 16G/ 1M = 16M = 214 ) memcached中 key/value 的Map是怎么组织的? 可以直接使用STL中的map来组织?
posted @ 2009-07-30 01:44 thinke365 阅读(140) | 评论 (0)编辑 收藏
  2009年7月28日

有多种基于事件机制的系统调用。
epoll
select
kqueue

libevent可以处理三种事件:计时器,信号和IO事件。
计时器的实现采用的是RBTree,可以实现对计时器高效的查询,排序和删除。 到1.4版本,实现的数据结构已经改为Heap,可以提高效率。(具体的测试统计数据呢?)

epoll的操作只涉及4个函数:epoll_create, epoll_ctl, close和epoll_wait。
是Linux设备:/dev/epoll

可以去了解下游戏服务器的性能权衡
使用select或poll,当在线人数上升时,性能会以2-3次方的指数下降?因此每台服务器都有一个明显的上限? // 这些数据可以收集一些的。
网络模型, Socket连接
epoll有两种工作模式:分别是LT(Level Triggeredd)和ET(Edge Triggered)。 LT模式下同时支持 阻塞和非阻塞 Socket,ET为高速模式,只支持非阻塞 Socket。
采用select模型,一个进程最多可打开的Socket数目是1024,当然可以通过修改内核代码加以扩大,但这样做麻烦,而且不具有可行性。
epoll是变相的 nio实现,采用了回调机制,只处理激活状态的Socket,因为只有激活的Socket才可以通过fd调用操作。
select,处理Socket连接时,则需要遍历整个Socket列表(不管是以数组的形式存放,还是以链表的形式存放)。 但是在LAN内,当几乎所有连接都处于激活状态的情绪下,select的性能甚至比epoll还要好。但是在WAN中,即只有少数 Socket连接处于激活状态的情绪下, epoll具有明显优势。

memcached使用了libevent库,但是使用的是里面的哪种 事件处理机制呢?

posted @ 2009-07-28 23:57 thinke365 阅读(195) | 评论 (0)编辑 收藏
仅列出标题