`
jarit
  • 浏览: 139388 次
社区版块
存档分类
最新评论

freebsd里的kqueue 和linux 2.6下的epoll

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

相关推荐

Global site tag (gtag.js) - Google Analytics