shipinsky 2011-03-01
两个东西极其相似,写好了一个之后,移到别外一个平台下,只要稍作修改就可以了,原理是一样,个人认为,从功能角度来盾kqueue比epoll灵活得多。在写kqueue的时候,内核帮你考虑好了不少东西。但是从效率来看,从我作的压力测试来看epoll比kqueue强。看看我的实验结果吧
客户端:linux,P3,256M,pthread多线程程序,开1万个线程,可是实际运行结果是,在linux2.4上只能打开4000多个线程的时候就报资源不足,郁闷了好久,不知道是什么资源,最大打开文件数是够了,内存也够(通过设置16k的栈空间)。后来把客户端移到linux2.6内核下,很快开出1万个线程来了。
epoll服务器端:P3,256M,在一万个并发线程下,面不改色,有条不紊地处理着数据,并发数能达到8000个连接。
kqueue服务器端:结果比较失望,在只能一条队列的情况下,并发数只能到2000,然后在客户端的读取数据时就会出现"connectresetbypeer"的错误。后来改用了两条队列,一条用来接收新连接,一条用来处理原有的连接。在这种情况下,并发数也只能到3000,然后又会陆陆续续出现连接的错误。
2、关于pthread库的内容,加深了一下了解,学会了几个新的调用。
3、关于freebsd和linux上的一些系统调置方面的东西。
最大打开文件数,在linux,直接用ulimit-a可以看到,并用ulimit进行修改,运行时有效。在freebsd下,用sysctl-a|grepkern.maxfilesperproc来查询,也可能直接修改。
还有一个就是freebsd的默认最大使用内存的限制,默认情况下是512M,可以能过grepMAXDSIZ/usr/include-r来查找它在头文件里面的定义。修改这个值的方法是在/boot/loader.conf加上一句kern.maxdsiz="xxxx",然后重启机器生效。
我觉得这几个小技巧可能会经常用到
我们直接指定到一个大空间去存储mysql数据。在CONFIGURE_ARGS=后面增加--with-charset=gb2312 \和--with-xcharset=all \ 两行才能支持中文字符。