select/poll/epoll
GoRustNeverStop
这个作者很懒,什么都没留下…
展开
-
【转】epoll精髓
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __原创 2014-08-28 11:40:28 · 1065 阅读 · 0 评论 -
彻底学会使用epoll(二)——ET和LT的触发方式
分析了ET和LT的实现方式,那么分析他们的触发方式就容易多了。我们通过实现分析知道LT模式下epoll_wait被唤醒可以通过两种方式(图中红线和蓝线),而ET模式只能通过一种方式(图中红线)。所以ET模式下能被唤醒的情况,LT模式下一定也能被唤醒。我们先来讨论特殊情况(ET模式),再来讨论一般情况(LT模式)。2.1 ET根据上一节对两种加入rdlist途径的分析,可以得出ET模转载 2016-08-18 17:08:18 · 2987 阅读 · 0 评论 -
彻底学会使用epoll(三)——ET的读操作实例分析
首先看程序一,这个程序想要实现的功能是当用户从控制台有任何输入操作时,输出”hello world!”。l 程序一 点击(此处)折叠或打开#include unistd.h>#include iostream>#include sys/epoll.h>using namespace std;int main(转载 2016-08-18 17:11:46 · 2643 阅读 · 0 评论 -
彻底学会使用epoll(四)——ET的写操作实例分析
首先,看程序四的例子。l 程序四点击(此处)折叠或打开#include unistd.h>#include iostream>#include sys/epoll.h>using namespace std;int main(void){ int epfd,nfds; str转载 2016-08-18 17:12:19 · 5288 阅读 · 0 评论 -
彻底学会使用epoll(五)—— ET模式下的注意事项
彻底学会epoll(五)—— ET模式下的注意事项——lvyilong3165.1 ET模式下的读写 经过前面几节分析,我们可以知道,当epoll工作在ET模式下时,对于读操作,如果read一次没有读尽buffer中的数据,那么下次将得不到读就绪的通知,造成buffer中已有的数据无机会读出,除非有新的数据再次到达。对于写操作,主要是因为ET模式下fd通常为非阻塞造成转载 2016-08-18 17:12:52 · 9847 阅读 · 1 评论 -
彻底学会使用epoll(六)——关于ET的若干问题总结
彻底学会使用epoll(六)——关于ET的若干问题总结——lvyilong3166.1 ET模式为什么要设置在非阻塞模式下工作 因为ET模式下的读写需要一直读或写直到出错(对于读,当读到的实际字节数小于请求字节数时就可以停止),而如果你的文件描述符如果不是非阻塞的,那这个一直读或一直写势必会在最后一次阻塞。这样就不能在阻塞在epoll_wait上了,造成其他文件描转载 2016-08-18 17:13:35 · 4627 阅读 · 1 评论 -
Epoll模型详解
1. 内核中提高I/O性能的新方法epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。要使用epoll只需要这三个系统调 用:epoll_create(2), epoll_ctl(2), epoll_wait(2)。当然,这不是2.6内核才有的,它是在 2.5.44内核中被引进的(epoll(4) is a new API introduced in转载 2016-08-18 17:15:41 · 1086 阅读 · 0 评论 -
poll&&epoll实现分析(一)——poll实现
0.等待队列在Linux内核中等待队列有很多用途,可用于中断处理、进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。等待队列实现了在事件上的条件等待: 希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制全。因此,等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。等待队列由循环链表实现,由等待队列头(wait_queue_head_t)和等待队列转载 2016-08-18 17:16:14 · 2464 阅读 · 0 评论 -
poll&&epoll实现分析(二)——epoll实现
Epoll实现分析——作者:lvyilong316通过上一章分析,poll运行效率的两个瓶颈已经找出,现在的问题是怎么改进。首先,如果要监听1000个fd,每次poll都要把1000个fd 拷入内核,太不科学了,内核干嘛不自己保存已经拷入的fd呢?答对了,epoll就是自己保存拷入的fd,它的API就已经说明了这一点——不是 epoll_wait的时候才传入fd,而是通过epoll_ctl转载 2016-08-18 17:16:56 · 2944 阅读 · 1 评论 -
彻底学会使用epoll(一)——ET模式实现分析
注:之前写过两篇关于epoll实现的文章,但是感觉懂得了实现原理并不一定会使用,所以又决定写这一系列文章,希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处,算是对我劳动成果的一点点尊重吧。另外,文中如果有不全面或者不正确的地方还请大家指出。也可以私信或者发邮件:lvyilong316@163.com1. ET模式实现分析1.1 ET和LT的实现区别 首先转载 2016-08-18 17:05:55 · 2925 阅读 · 1 评论 -
Epoll示例代码
#include #include #include #include #include #include #include #include #include #include #define MAXEVENTS 64static intmake_socket_non_blocking (int sfd){ int flags, s; flags = fc转载 2016-08-05 14:08:00 · 752 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2016-07-22 08:55:15 · 1347 阅读 · 0 评论 -
libevent学习资源整理
The libevent API provides a mechanism to execute a callback function when aspecific event occurs on a file descriptor or after a timeout has beenreached. Furthermore, libevent also support callbac原创 2015-02-12 23:07:08 · 773 阅读 · 0 评论 -
epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unav原创 2015-03-01 18:42:48 · 1202 阅读 · 0 评论 -
IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞 》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link 。写完之后发现很多人都很喜欢,我还是非常开心的,也说明这个问题确实困扰了很多人。随着学习的深入,渐渐的感觉原来的理解有些偏差,但是还是没引起自己的重视,觉着都是一些小错误,无伤大雅。直到原创 2015-04-11 14:55:20 · 806 阅读 · 0 评论 -
linux中的epoll机制
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明: #define原创 2015-04-11 15:01:56 · 871 阅读 · 0 评论 -
epoll介绍
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2016-04-14 20:03:52 · 469 阅读 · 0 评论 -
epoll网络编程实例
在前面已经经过了PPC、TPC、select之类( TPC就是使用进程处理data,TPC就是使用线程处理 ),前面两个的缺点大家应该都是知道的是吧,对于select( 其实poll和他差不多 ),缺点是能同时连接的fd是在是不多,在linux中一般是1024/2048,对于很大的服务器来说是不够的!当然我们可以自己修改其值!但是效率上就会下降! 对于改进poll的epoll来转载 2016-04-14 20:42:44 · 772 阅读 · 0 评论 -
epoll的再次认识
原文链接:epoll的再次认识使用mmap加速内核与用户空间的消息传递。这 点实际上涉及到epoll的具体实现了。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很 重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你想我一样从2.5内核就关注epoll的话,一定不会忘记手工 mmap这一步的。转载 2016-07-13 09:06:27 · 678 阅读 · 0 评论 -
对于linux socket与epoll配合相关的一些心得记录
对于linux socket与epoll配合相关的一些心得记录没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的int nRecvBuf=32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));1、通过上面语句可以简单设置缓冲区大小,测试转载 2016-07-13 09:21:44 · 3479 阅读 · 0 评论 -
Epoll详解及源码分析
Author:Echo Chen(陈斌)Email:chenb19870707@gmail.comBlog:Blog.csdn.net/chen19870707Date:Jan.7th, 2015 1.什么是epollepoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和s转载 2016-11-02 11:51:49 · 6192 阅读 · 1 评论