【电话面试】io多路复用专题面试 这个真猛

有人做了笔记:点这里

select

Select(Max+1,&rset,null,null,null)是因为0~max是max+1。

过程:

  • 将文件描述符收集过来,把bitmap从用户态拷贝到内核态,交给内核态判断那个有数据。Select是个阻塞函数,没有数据时会一直阻塞在select。如果有数据来,FD(对应的bitmap那一位)置位,然后select返回,O(n)判断哪一个被置位了,然后将那一位的数据读出来然后进行处理。

缺点:

  • 1 bitmap默认大小是1024,虽然能调整,但仍有上线。
  • 2 从用户态切换到内核态的切换然后拷贝有额外开销。
  • 3 O(n)遍历判断哪一个被置位了。

poll

Poll(pollfds,5(元素个数),50000(超时时间));

  • 同样是从用户态拷贝到内核态,和select一样,好处是没有使用bitmap,strct pollfd{Int fdl short events; short revents;};
  • event在意的事件(读写),poll也是阻塞函数,有被置位,置的是revents而不是fd,然后返回。O(n)个被置位了,然后将那一位的数据读出来然后进行处理,将revents重置为0。

改善的缺点就是没了bitmap的上限(pollfd设置元素个数)

epoll 

epoll只能工作在linux下!

  • 首先创建一个epoll对象,然后使用epoll_ctl对这个对象进行操作,把需要监控的描述添加进去,这些描述如将会以epoll_event结构体的形式组成一颗红黑树,接着阻塞在epoll_wait,当某个fd上有事件发生时,内核中断处理函数将会把其对应的结构体放入到一个链表中,最后返回有事件发生的链表。
  • 如何解决poll的缺点?fd是共享在用户态和内核态之间,避免的切换拷贝的资源开销。把触发的事件用链表存储,这样可以通过O(1)访问。

epoll 水平触发(LT)与 边缘触发(ET)的区别?

  • 水平触发(LT,Level Trigger):当文件描述符就绪时,会触发通知,如果用户程序没有一次性把数据读/写完,下次还会发出可读/可写信号进行通知。
  • 边缘触发(ET,Edge Trigger):仅当描述符从未就绪变为就绪时,通知一次,之后不会再通知。

区别:边缘触发效率更高,减少了事件被重复触发的次数,函数不会返回大量用户程序可能不需要的文件描述符。

使用场景:当连接数较多并且有很多的不活跃连接时,epoll 的效率比其它两者高很多。当连接数较少并且都十分活跃的情况下,由于 epoll 需要很多回调,因此性能可能低于其它两者。

多路复用IO:select poll epoll的更多相关文章

  1. IO多路复用之select poll epoll

    参考文档: http://blog.csdn.net/tennysonsky/article/details/45745887 select(),poll(),epoll()都是I/O多路复用的机制. ...

  2. I/O多路复用之select,poll,epoll简介

    一.select 1.起源 select最早于1983年出现在4.2BSD中(BSD是早期的UNIX版本的分支). 它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回 ...

  3. IO模型之IO多路复用 异步IO select poll epoll 的用法

    IO 模型之 多路复用 IO 多路复用IO IO multiplexing 这个词可能有点陌生,但是如果我说 select/epoll ,大概就都能明白了.有些地方也称这种IO方式为 事件驱动IO ( ...

  4. Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)

    Linux下测试代码: http://www.linuxhowtos.org/C_C++/socket.htm TCP模型 //TCPClient.c #include<string.h> ...

  5. Python 协程/异步IO/Select\Poll\Epoll异步IO与事件驱动

    1 Gevent 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到 ...

  6. 浅谈网络I/O多路复用模型 select & poll & epoll

    http://blog.csdn.net/nk_test/article/details/50662946

  7. Select/Poll/Epoll异步IO

    IO多路复用 同步io和异步io,阻塞io和非阻塞io分别是什么,有什么样的区别? io模式 对于一次io 访问(以read为例),数据会先拷贝到操作系统内核的缓冲区,然后才会从操作系统内核的缓冲区拷 ...

  8. Linux IO模式以及select poll epoll详解

    一 背景 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network ...

  9. 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】

    下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...

  10. IO多路复用select/poll/epoll详解以及在Python中的应用

    IO multiplexing(IO多路复用) IO多路复用,有些地方称之为event driven IO(事件驱动IO). 它的好处在于单个进程可以处理多个网络IO请求.select/epoll这两 ...

随机推荐

  1. sqlmap-1.6.12.11

    Usage: sqlmap.py [options] 选项: -h, --help 显示基本帮助信息并退出 -hh 显示高级帮助信息并退出 --version 显示程序的版本号并退出 -v VERBO ...

  2. 转—记录一下获取NC程序名称的方法

    案例源代码如下: #include <uf_obj.h> #include <uf_setup.h> #include <uf_ncgroup.h> static ...

  3. 「SOL」射命丸文的笔记 (洛谷)

    讲题人:"这是一个很经典的模型,大家应该都会" 我:"???" # 题面 给出 \(m\),求所有 \(m\) 个点的有标号强联通竞赛图的哈密顿回路数量的平均数 ...

  4. MeanShift 均值漂移算法

    MeanShift, 它常被用在图像识别中的目标跟踪,数据聚类.分类等场景

  5. bzoj 3532

    很好的一道题,对理解最小割有很大帮助 首先,不难发现本题与网络流24题中的某一道很类似,我们可以先跑一次dp求出每个节点的LIS,然后拆点,拆出的两点之间连流量为删除的代价的边,剩下的点之间按dp的转 ...

  6. HTTP协议中的长连接和短链接

    一.概念 HTTP长连接,也称持久连接,是使用同一个TCP连接来发送和接受多个HTTP请求/应答,而不是位每一个新的请求/应答打开新的TCP连接.这种方式由于通信连接一直存在,此种方式常用于P2P通信 ...

  7. software engineering homework 2

    博客信息 沈阳航空航天大学计算机学院2020软件工程作业 作业要求 https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/1058 ...

  8. react修改静态文件根目录

    .env(项目根目录环境变量文件) PUBLIC_URL:http://cdn.com/

  9. 复习笔记,javadoc生成文档总结

    1.处理数字时候的内存溢出问题       //在处理大数字时候注意内存溢出问题        int i=10_0000_0000; //jdk7 中数字之间可以加入下划线不影响输出         ...

  10. Python爬虫之Scrapy制作爬虫

    前几天我有用过Scrapy架构编写了一篇爬虫的代码案例深受各位朋友们喜欢,今天趁着热乎在上一篇有关Scrapy制作的爬虫代码,相信有些基础的程序员应该能看的懂,很简单,废话不多说一起来看看. 前期准备 ...