2012年3月30日
摘要: 我们先来介绍下nginxnginx :支持高并发连接.官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数,得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型.而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式,需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多.select 和epoll效率差的原因: select是轮询、epoll是触发式的,所以效率高。单单这样讲,那能懂了才见鬼了.好...我们暂且客观的记住这句话.先说Select:1.Socket数量限制:该模式可 阅读全文
posted @ 2012-03-30 18:06 一个人的天空@ 阅读(2006) 评论(0) 推荐(1) 编辑
摘要: select()系统调用提供一个机制来实现同步多元I/O: #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); FD_CLR(int fd, fd_set *set); FD_ISSET(int fd, fd_set *set); FD_SET(int fd, fd_set *set); 阅读全文
posted @ 2012-03-30 16:44 一个人的天空@ 阅读(1711) 评论(0) 推荐(0) 编辑
摘要: 在高性能服务器中,一般采用非阻塞网络IO,单进程事件驱动的架构。这种架构的核心是事件驱动机制。目前Linux常用select,poll和epoll系统调用来完成事件驱动。select和poll是传统的unix事件驱动机制,但它们有很大的缺点:在大量的并发连接中,如果冷连接较多,select和poll的性能会因为并发数的线性上升而成平方速度的下降,这是因为调用者在每次select和poll返回时都要检测每个连接是否有事件发生,当连接数很大时,系统开销会非常大。另外select和poll每次返回时都要从内核向用户空间复制大量的数据,这样的开销也很大。所以,select和poll并不是处理网络IO的 阅读全文
posted @ 2012-03-30 16:02 一个人的天空@ 阅读(674) 评论(0) 推荐(0) 编辑
摘要: 以前写服务器程序直接就都写成多线程的了,没考虑过其他方式,也没考虑到底哪种方式好;前些日子看些人说windows下面用完成端口、Linux下面用epoll,这些效率高。其它环境一说就是select;似乎很多人不愿意提多线程方式,也许被传说中的线程同步吓得吧;我个人还是偏向多线程方式,这样不但可以监视多端口,还可以分离业务逻辑,便于调试维护。----------------------------------------------------------------------------------------------------看明白这几个东西,需要一个环境,描述问题;就是我的程序需要 阅读全文
posted @ 2012-03-30 16:01 一个人的天空@ 阅读(2577) 评论(0) 推荐(0) 编辑
摘要: poll函数 poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 1.#include <poll.h> 2. 3.int poll(struct pollfd *fdarray, unsigned long nfds, int timeout); 4. 返回:就绪描述字的个数,0-超时,-1-出错 第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。 struct pollfd{. 阅读全文
posted @ 2012-03-30 16:00 一个人的天空@ 阅读(4845) 评论(0) 推荐(0) 编辑