2010-04-30

今天看了下thttpd的实现,总之不算很好。

比如,p=realloc(p,….) 这样的写法,比如,它在启动的时候根据最大可打开的文件句柄数就预先把一些资源分配好,不过那些数据结构很小。

再比如,它为什么不能处理2G以上的文件?因为它对于每个静态文件请求,是把该文件mmap到内存里,然后根据最后引用时间和refcount来清理。那么在32位平台下,很容易就把地址空间给塞爆了。

还有,假如在执行stat和mmap之间,文件大小被缩短了,那么带来的结果是完全难以预知的,很有可能会导致 thttpd 崩溃。而,在不关闭http服务的情况下更新文件,是很正常的啊。

还有,thttpd 在bsd下会优先采用kqueue,但是在linux下,至今不支持epoll。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥