了解 epoll 的原理
来源:互联网 发布:js换行符分隔字符串 编辑:程序博客网 时间:2024/06/03 23:02
nginx 相比 apache,在高并发情况下依然应付自如。
阻塞
TCP连接建立后,服务器等待客户消息到来。在大部分时间,客户是不活跃的。阻塞模型就只能等待,此时其他客户就无法进入。即便采用多线程,线程过多反而导致效率低下。
Select
一个线程建立多个连接(Windows最大为WSA_MAXIMUM_WAIT_EVENTS(64),Linux最大为1024),轮询这些连接(CPU都用来轮询了,所以这样理解的话还是阻塞的)。为了支持更多并发,也需要多线程,但这还是达不到百万并发。
Windows中的WSAAsyncSelect一种异步通知模型,当有消息到来时,系统通知对应窗口句柄。一个窗口句柄等待一个连接,效率可想而知。WSAEventSelect 则使用Event对象接收消息(即WSAWaitForMultipleEvents 方法,并阻塞),而且Event对象限制为WSA_MAXIMUM_WAIT_EVENTS(64)。
这里所谓异步,即数据IO由操作系统完成,再将结果返回给应用程序;同步IO:数据IO由程序去执行(这个过程中,由于CPU速度远快于其他速度,因此效率不高)
epoll
建立了大量连接后(系统使用红黑树+双链表以实现快速查询),当有事件到来时,系统在众多连接中找出对应的连接(O(lgN))给用户处理。
综上所述,本来就应该直接出现epoll,其他种种不合理的模型貌似根本就没有存在的理由。而且epoll本身也不是太难。
高并发网络编程之epoll详解
epoll
Linux 开发,使用多线程还是用 IO 复用 select/epoll?
epoll基本原理及使用框架
1 0
- 了解 epoll 的原理
- epoll之一:epoll的原理
- epoll的实现原理
- epoll的实现原理
- epoll 的实现原理
- epoll的原理
- epoll的实现原理
- epoll的实现原理
- 了解epoll
- epoll的高效实现原理
- epoll或者kqueue的原理
- epoll的原理和用法
- epoll的原理和用法
- epoll的高效实现原理
- epoll的高效实现原理
- epoll的高效实现原理
- epoll的高效实现原理
- epoll模型的实现原理
- 百度推送
- jdk7 并行计算框架Fork/Join
- Oracle decode函数
- 《C++精英内参之程序员高效指南》-25争论的根源
- Java NIO中的Buffer 详解
- 了解 epoll 的原理
- Java实现获取前、后N天日期的函数
- poj1276(dp) Cash Machine
- asp tags like <% %>
- 线程超时处理
- weex JS部分环境搭建简单笔记
- 读取Android手机设备相关信息
- 【数据结构】链表相关内容
- Capturing Photos之Taking Photos Simply