http://blog.codingnow.com/2006/04/iocp_kqueue_epoll.html 设计 mmo 服务器,我听过许多老生常谈,说起处理大量连接时, select 是多么低效。我们应该换用 iocp (windows), kqueue(freebsd), 或是 epoll(linux) 。的确,处理大量的连接的读写,select 是够低效的。因为 kernel 每次都要对 select 传入的一组 socket 号做轮询,那次在上海,以陈榕的说法讲,这叫鬼子进村策略。一遍遍的询问“鬼子进村了吗?”,“鬼子进村了吗?...
我比较喜欢freebsd,但现在听说在高负载的情况下kqueue比epoll差多了,不知道是否是这样的。说kqueue的性能差是在下面这个网页上看到的:http://www.oklinux.cn/html/other/unix/20070423/21863.html 请了解的朋友给解释下。
1、freebsd里的kqueue和linux 2.6下的epoll 两个东西极其相似,写好了一个之后,移到别外一个平台下,只要稍作修改就可以了,原理是一样,个人认为,从功能角度来盾kqueue比epoll灵活得多。在写kqueue的时候,内核帮你考虑好了不少东西。但是从效率来看,从我作的压力测试来看epoll比kqueue强。看看我的实验结果吧 客户端: linux ,P3,256M ,pthread多线程程序,开1万个线程,可是实际运行结果是,在linux2.4上只能打开4000多...
#include sys/types.h> #include netinet/in.h> #include sys/event.h> #include sys/time.h> #include sys/socket.h> #include sys/types.h> #include arpa/inet.h> #include unistd.h> #include stdlib.h> #include string.h> #include stdio.h> #define err(msg) perror(msg) #define SA struct sockaddr struct event { int fd; void (*handle)(struct event *); }; static int tcp_listen(void) { ...
传统的UNIX平台对于socket或者其他套接字的处理,用的是select()或poll()系统调用,但是当需要处理的描述符的数量增多时,传统的处理方式就会显现出其局限性。kqueue机制的引入,就是为了应对这样的状况,对于kqueue的更详尽的描述,可以参考以下的链接: http://people.freebsd.org/~jlemon/papers/kqueue.pdf http://www.kegel.com/c10k.html 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/...
大家有没有遇到epoll_wait()一次返回的事件里有相同的events,就是events.data.fd=events[j].data.fd (i!=j), 我测试的是一秒大概5000个tcp通信
Linux 2.6内核中提高网络I/O性能的新方法epoll 正如我昨天在“Linux下各类TCP网络服务器的实现源代码”( http://zhoulifa.bokee.com/5345930.html )一文中提到的那样,I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。 感谢chinaunix.net上朋友safedead( http://bbs.chinaunix.net/viewpro.php?uid=407631 )提醒,我今天仔细研究了一下,证实了在2.6内核中的新的I/O技术epoll。 1、为什么select是...