1.服务器程序里经常有种方法是先预先定义一个obj的数组,每次需要时直接获取,而不是malloc一个。(联易代码和nginx都是)

2.nginx中在对fd有两种监听方法,一个是用epoll来监听是否可读可写,一个使用timer来观察是否超时,这两种都触发同一个处理函数,根据event结构里标记来判断类型,做不同的处理.要做到这点,需要设计优雅的数据结构和关联,这个还在继续学习中

3.nginx slab 实现

nginx slab_pool中有两个主要的元素,一个是free的pages链表,一个是slot数组。如果要分配500bytes的空间,就去找对应512bytes的slots,这里也是一个链表结构,看是否存在一个仍未全部利用的页面,如果有则将这个页面中空闲的首地址返回给用户,如果这个页面已经全部利用则从slots中删除掉。
如果对应的slots中找不到,则从free链表中着一个分配给此slots。

和伙伴算法不同的在slots里着不到时则从free链表中返回一个free的页面给它,而不是从上级slot中拆分。

以前总是有个疑惑,感觉在slab里需要链表,怎么在实现内存分配的函数里分配内存,现在有所明了,就如上1中所说的那样,预先定义变量,就如同后期分配了一个内存。

 

4.日志服务器可以直接写本地文件吗?log写需要做异步吗?

 

5.nginx中定时器的实现,current_time的更新,delta的含义?

posted on 2012-05-06 12:35  brucexu  阅读(183)  评论(0编辑  收藏  举报