[epoll]epoll理解
转自:http://blog.51cto.com/yaocoder/888374
1. 流
2. 阻塞与非阻塞
- 阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干,或者说接下来的事要等快递来了才能做;那么你可以去睡觉了,因为你知道快递把货送来时一定会给你打个电话(假定一定能叫醒你)。
- 非阻塞忙轮询:接着上面等快递的例子,如果用忙轮询的方法,那么你需要知道快递员的手机号,然后每分钟给他挂个电话:“你到了没?”
3. 缓冲区
- 假设一开始内核缓冲区是空的,B作为读出方,被阻塞着。然后首先A往管道写入,这时候内核缓冲区由空的状态变到非空状态,内核就会产生一个事件告诉B该醒来了,这个事件姑且称之为“缓冲区非空”。
- 但是“缓冲区非空”事件通知B后,B却还没有读出数据;
- 且内核许诺了不能把写入管道中的数据丢掉这个时候,A写入的数据会滞留在内核缓冲区中,如果内核也缓冲区满了,B仍未开始读数据,最终内核缓冲区会被填满,这个时候会产生一个I/O事件,告诉进程A,你该等等(阻塞)了,我们把这个事件定义为“缓冲区满”。
- 假设后来B终于开始读数据了,于是内核的缓冲区空了出来,这时候内核会告诉A,内核缓冲区有空位了,你可以从长眠中醒来了,继续写数据了,我们把这个事件叫做“缓冲区非满”
- 也许该事件已经通知了A,但是A也没有数据写入了,而B继续读出数据,知道内核缓冲区空了。这个时候内核就告诉B,你需要阻塞了!,我们把这个事件定为“缓冲区空”。
4. 阻塞I/O和非阻塞I/O缺点
while true {for i in stream[]; {if i has dataread until unavailable} }
5. Select和Poll
while true {select(streams[])for i in streams[] {if i has dataread until unavailable} }
6. Epoll
epoll_create //创建一个epoll对象,一般epollfd = epoll_create() epoll_ctl (epoll_add/epoll_del的合体);//往epoll对象中增加/删除某一个流的某一个事件 //比如 epoll_ctl(epollfd, EPOLL_CTL_ADD, socket, EPOLLIN);//注册缓冲区非空事件,即有数据流入 epoll_ctl(epollfd, EPOLL_CTL_DEL, socket, EPOLLOUT);//注册缓冲区非满事件,即流可以被写入 epoll_wait(epollfd,...)等待直到注册的事件发生
while true {active_stream[] = epoll_wait(epollfd)for i in active_stream[] {read or write till} }
转载于:https://www.cnblogs.com/aaronLinux/p/9039629.html
[epoll]epoll理解相关推荐
- 处理大并发之一 对epoll的理解,epoll客户端服务端代码
http://blog.csdn.net/zhuxiaoping54532/article/details/56494313 处理大并发之一 对epoll的理解,epoll客户端服务端代码 序言: 该 ...
- 使用多线程还是用IO复用select/epoll? epoll 或者 kqueue 的原理是什么?
原作者:蓝形参 原文:http://www.zhihu.com/question/20114168/answer/14024115 使用多线程还是用IO复用select/epoll? 多线程模型适用于 ...
- 浅析epoll – epoll例子以及分析 - C++爱好者博客
浅析epoll – epoll例子以及分析 - C++爱好者博客 浅析epoll – epoll例子以及分析
- 浅析epoll – epoll例子以及分析
上篇我们讲到epoll的函数和性能.这一篇用用这些个函数,给出一个最简单的epoll的例子. // // a simple echo server using epoll in linux // // ...
- 浅析epoll – epoll函数深入讲解
前一篇大致讲了一下epoll是个什么东西,优点等内容,这篇延续上一篇的内容,主要是分析epoll的函数,epoll高性能的深入分析. epoll的三大函数 1.创建epoll fd函数 int epo ...
- 处理大并发之二 对epoll的理解,epoll客户端服务端代码
http://blog.csdn.net/wzjking0929/article/details/51838370 序言: 该博客是一系列的博客,首先从最基础的epoll说起,然后研究libevent ...
- Linux IO复用:select、poll、epoll的理解与对比
目录 IO多路复用 select系统调用 poll系统调用 Epoll *系统调用 Epoll vs select/poll 相关文章 Linux(实际上是Unix)的一个基本概念是Unix / Li ...
- linux中epoll原理,linux epoll epoll的原理
epoll原理简述:epoll = 一颗红黑树 + 一张准备就绪句柄链表 + 少量的内核cache select/poll 每次调用时都要传递你所要监控的所有socket给select/poll系统调 ...
- Linux网络编程 五种I/O 模式及select、epoll方法的理解
近期一次面试机会让我觉得有很多地方理解可能不到位,翻翻谷歌的资料加深对一些技术的理解 五种I/O 模式: [1] 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建 ...
最新文章
- Pytorch入门之VAE
- 10分钟了解图卷积神经网络的常用算法和发展方向
- 被微软称为 “世界的电脑” ,Azure 到底有多牛?
- 立体匹配算法实现之:AdaptWeight
- Lazy FP状态还原漏洞公布,大多数Intel的酷睿CPU受其影响
- 荷花旁的浪漫,优雅了谁的光年,清纯少女芭蕾写真
- Remoting技术使用配置文件示例
- 谈一下JavaScript的语法
- 图论--最短路--SPFA模板(能过题,真没错的模板)
- 吴恩达机器学习作业(五):支持向量机
- POJ 1442 Black Box(大小堆,求第K小的元素)
- matlab最小费用最大流函数,Matlab最小费用最大流算法通用程序
- Html辅助方法(分页、下拉框)
- 图像的上采样与下采样
- 抽签抽奖小程序小工具(jquery+html)只需浏览器运行xlsx.core.min.js
- Android 解析微信基础表情并显示
- 2022年MSI赛程安排时间表 MSI赛事规则
- C++校内模拟赛-06水题
- matlab自带的VAD检测程序
- 服饰Clothing