epool与select的区别:
select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048,一般来说内存越大,fd上限越大,1G内存都能达到大约10w左右。
select的轮询机制是系统会去查找每个fd是否数据已准备好,当fd很多的时候,效率当然就直...
分类:
其他好文 时间:
2014-12-01 20:57:38
阅读次数:
136
Nginx源码分析—定时器事件
对于每一个进程都有一个事件缓存,对于worker进程而言,除了nginx启动时更显一次时间外,任何更新时间的操作都只能由ngx_epoll_process_events方法执行。在此方法中,当flags参数中有NGX_UPDATE_TIME标志位,或者ngx_event_timer_alarm标志位为1时,就会调用ngx_time_update方法更新缓存时间。
...
分类:
其他好文 时间:
2014-11-26 16:38:35
阅读次数:
163
Nginx源码分析—过期事件和惊群事件的处理
过期事件:每个事件的date域都是一个结构体ngx_connection_t结构体,表示对应的连接。对于一个结构体struct epoll_event 中的data.ptr成员存储的是ngx_connection_t连接,这里使用Instance标志位来标识,下面就配合ngx_epoll_process_events方法说明他的用法。
Data.p...
分类:
其他好文 时间:
2014-11-26 16:38:07
阅读次数:
165
我实现了一个server,支持HTTP协议和内部私有协议,为了简化部署,我设计成一个端口同时兼容两种协议的客户端。根据连接后到达的消息头自动识别客户端协议。这种事情的传统做法是,accept后加入epoll,当fd第一次可读时,读出一些并解析,判断协议类型。创建相应的上下文对象,开始服务。这样就引入...
分类:
其他好文 时间:
2014-11-19 23:42:57
阅读次数:
297
昨天和同事奋战几个小时,解决了一个linger造成的bug。现象是这样的,这是一个我从原型接手,扩充了各种功能成为可用代码的epoll实现的非阻塞socket server程序,接收大量的短连接,测试发现性能有问题,用gperftools的cpu profiler也没看出问题。就在一些可疑调用的地方...
分类:
其他好文 时间:
2014-11-19 22:07:25
阅读次数:
316
Nginx的框架设计—进程模型
在这之前,我们首先澄清几点事实:
nginx作为一个高性能服务器的特点,其实这也是所有的高性能服务器的特点,依赖epoll系统调用的高效(高效是相对select/poll这些系统调用的,底层有一个链表和红黑树,避免了轮询,减少了用户空间和系统空间之间的数据传递等),非阻塞(所有的操作都是非阻塞,这样),多进程(master-slave进程模型),这些事实使得ng...
分类:
系统相关 时间:
2014-11-19 20:35:59
阅读次数:
359
开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?
先简单回顾下如何使用C库封装的3个epoll系统调用吧。
...
分类:
系统相关 时间:
2014-11-19 20:34:27
阅读次数:
180
虽然nginx使用较少还是写写文章,记录下nginx是异步非阻塞,apache是阻塞的.apache动态页面比nginx好.由于nginx的高并发性(使用epoll模型),所以出来静态页面性能好.nginx做代理apache做后端(处理动态页面)
分类:
Web程序 时间:
2014-11-18 17:24:09
阅读次数:
191
1.两者所用的驱动模式不同。nginx使用的是epoll的非阻塞模式事件驱动。apache使用的是select的阻塞模式事件驱动。2.fastcgi和cgi的区别当用户请求web服务的时候,web会根据不同的需求将请求发送给不同个cgi来处理。cgi模式,就是每次有请求的时候都fork一个新的进程来...
分类:
Web程序 时间:
2014-11-17 12:09:22
阅读次数:
719
在Python中如何使用Linux的epoll目录序言阻塞socket编程示例异步socket的好处以及Linux epoll带epoll的异步socket编程示例性能注意事项源代码序言从2.6开始,Python包含了访问Linux epoll库的API。这篇文章用几个简单的python 3例子来展...
分类:
编程语言 时间:
2014-11-12 22:29:28
阅读次数:
346