zoukankan      html  css  js  c++  java
  • sellect、poll、epoll

    1. select (能监控数量有限,不能告诉用户程序具体哪个连接有数据)

    1. select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点

    2. select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024

    3. select监控socket连接时不能准确告诉用户是哪个,比如:现在用socket监控10000链接,如果其中有一个链接有数据了,select就会告诉用户程序,你有socket来数据了,那样就只能自己循环10000次判断哪个活跃

    2. poll(和select一样,仅仅去除了最大监控数量)

    1. poll和select在本质上没有多大差别,但是poll没有最大文件描述符数量的限制

    2. 可以理解为poll是一个过渡阶段,大家也都不用他

    3. epoll (不仅没有最大监控数量限制,还能告诉用户程序哪个连接有活跃)

    注:epoll被认为是linux下性能最好的多路io就绪通知方法

    1. epoll直到Linux2.6(centos6以后)才出现了由内核直接支持

    2.Epoll没有最大文件描述符数量限制

    3. epoll最重要的优点是他可以直接告诉用户程序哪一个,比如现在用epoll去监控10000个socket链接,交给内核去监测,现在有一个连接有数据了,在有有一个连接有数据了,epoll会直接高数用户程序哪个连接有数据了

    4. epoll能实现高并发原理

    1. epoll() 中内核则维护一个链表,epoll_wait 直接检查链表是不是空就知道是否有文件描述符准备好了。

    2. 在内核实现中 epoll 是根据每个 sockfd 上面的与设备驱动程序建立起来的回调函数实现的。

    3. 某个 sockfd 上的事件发生时,与它对应的回调函数就会被调用,把这个 sockfd 加入链表。

    4. epoll上面链表中获取文件描述,这里使用内存映射(mmap)技术, 避免了复制大量文件描述符带来的开销

    内存映射(mmap):内存映射文件,是由一个文件到一块内存的映射,将不必再对文件执行I/O操作

  • 相关阅读:
    串行化数据读取类(WebService下DataSet的高性能替代类)源代码
    如何在Access2007中打开加密的Access2003数据库
    业务流程不是需求(ZT)
    XML文件的DOCTYPE定义(转)
    别让Hibernate偷走了您的身份(转)
    有关Struts标签<html:cancel>使用的一点提示
    Silverlight下实现Windows8风格的进度条
    DotNetMock单元测试的利器
    进入ubuntu终端的快捷键
    花生壳域名建站,内网能访问,外网不能访问的解决办法
  • 原文地址:https://www.cnblogs.com/ngngng/p/13881439.html
Copyright © 2011-2022 走看看