为什么80%的码农都做不了架构师?>>>   

epoll相对select优点主要有三:

1.   select的句柄数目受限,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE    1024  表示select最多同时监听1024个fd。而epoll没有,它的限制是最大的打开文件句柄数目。

2.   epoll的最大好处是不会随着FD的数目增长而降低效率,在selec中采用轮询处理,其中的数据结构类似一个数组的数据结构,而epoll是维护一个队列,直接看队列是不是空就可以了。epoll只会对"活跃"的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有"活跃"的socket才会主动的去调用 callback函数(把这个句柄加入队列),其他idle状态句柄则不会,在这点上,epoll实现了一个"伪"AIO。但是如果绝大部分的I/O都是“活跃的”,每个I/O端口使用率很高的话,epoll效率不一定比select高(可能是要维护队列复杂)。

3.   使用mmap加速内核与用户空间的消息传递。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。

转载于:https://my.oschina.net/guyson/blog/220222

epoll/select相关推荐

  1. Linux下多路复用IO接口epoll/select/poll的区别

    select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高. Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认 ...

  2. 关于阻塞I/O 非阻塞I/O 同步I/O 异步I/O epoll select的学习

    之前参考了这篇文章,下面写一写笔记 阻塞IO 非阻塞IO 1.blocking IO linux中默认的socket都是阻塞的 用户进程发出系统调用后,数据未准备好,进程阻塞..之后内核中有两个阶段: ...

  3. python3 异步 非阻塞 IO多路复用 select poll epoll 使用

    有许多封装好的异步非阻塞IO多路复用框架,底层在linux基于最新的epoll实现,为了更好的使用,了解其底层原理还是有必要的. 下面记录下分别基于Select/Poll/Epoll的echo ser ...

  4. epoll和select区别

     先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻 ...

  5. python poll_python IO 多路复用 select poll epoll

    select select 原理 select 是通过系统调用来监视着一个由多个文件描述符(file descriptor)组成的数组,当select()返回后,数组中就绪的文件描述符会被内核修改标记 ...

  6. IO多路复用 select、poll、epoll

    什么是IO多路复用 在同一个线程里面, 通过拨开关的方式,来同时传输多个(socket)I/O流. 在英文中叫I/O multiplexing.这里面的 multiplexing 指的其实是在单个线程 ...

  7. Python中的select、epoll详解

    Python中的select.epoll详解 文章目录 Python中的select.epoll详解 一.select 1.相关概念 2.select的特性 1.那么单进程是如何实现多并发的呢??? ...

  8. Python异步非阻塞IO多路复用Select/Poll/Epoll使用

    来源:http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架,底层在linux基于最新的epoll实现,为了更好的使用,了解其底层原理 ...

  9. IO多路复用(select,poll,epoll)详解

    前言 学习多路复用之前,搞清楚同步,异步,阻塞 非阻塞.点击见详情 清楚一些概念: (1) fd全称是file descriptor,是进程独有的文件描述符表的索引 (2)recv: int recv ...

最新文章

  1. 征集佳句-精妙SQL语句收集
  2. dubbo学习笔记 第四章构建dubbo的web应用 上
  3. Markdown 语法说明
  4. redis的info指令详解
  5. spring框架如何调用异步方法?快进来学学吧
  6. Vs + Qt 编译 .ui 文件
  7. uva 10245 The Closest Pair Problem_枚举
  8. C语言 floor四舍五入,Math函數的四舍五入,Floor,Ceiling,Round的一些注意事項!...
  9. 社交媒体电影视频网HTML5模板
  10. 好玩的问答,看看你的年龄阶段哦
  11. 九问国产操作系统,九大掌门人万字回应!
  12. Linux入门之VIM快捷使用
  13. 基于先验LiDAR点云地图的单目VIO定位
  14. KNN算法实验-采用UCI的Iris数据集和DryBean数据集
  15. swiper实现移动端导航和内容板块的联动
  16. TKMybatis的使用大全和例子(example、Criteria、and、or)
  17. mysql里一个中文多少个字节_mysql里中文占多少个字节?
  18. 迭代期望和方差(iterated expectation,variance)
  19. 《Fundamentals of Computer Grahpics》虎书第三版翻译——第一章 介绍
  20. 广州Uber优步司机奖励政策(2月1日~2月7日)

热门文章

  1. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)
  2. iOS开发之AVKit框架使用
  3. java并发编程——并发容器类介绍
  4. head和tail命令详解
  5. 「hadoop」hadoop启动需要相关的命令(仅供本人使用)
  6. linux awk命令
  7. [IOS]UIWebView实现保存页面和读取服务器端json数据
  8. MySQL5.5加主键锁读问题
  9. Unity 简单示例代码和向导/Unity Aplication Block
  10. 上交2017计算机专业就业,上海交通大学计算机科学与工程系(CSE)