zoukankan      html  css  js  c++  java
  • IO多路复用机制:select、poll、epoll的区别

    IO多路复用机制:select、poll、epoll的区别

    1.单个进程打开的文件描述符(fd文件句柄)不一致

    ​ select :有最大连接数限制数为1024,单个进程所能打开的最大连接数由FD_ZETSIZE宏定义。

    ​ poll:poll本质上与select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的。

    ​ epoll:虽然连接有上限,但是很大,1G内存的机器可以打开10万左右的连接,以此类推。

    2.监听Socket的方式不一致

    select :轮询的方式,一个一个的socket检查过去,发现有socket活跃时才进行处理,当线性socket增多时,轮询的速度将会变得很慢,造成线性造成性能下降问题。

    poll:对select稍微进行了优化,只是修改了文件描述符,但是监听socket的方式还是轮询。

    expoll:epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,通知expoll来处理这个socket。(会将连接的socket注册到epoll中, 相当于socket的花名册, 如果有一个socket活跃了, 会回调一个函数, 通知epoll,赶紧过来处理)

    3.内存空间拷贝方式(消息传递方式)不一致

    select:内核想将消息传递到用户态,需要将数据从内核态拷贝到用户态,这个过程非常的耗时

    poll:同上

    epoll:epoll的内核和用户空间共享一块内存,因此内存态数据和用户态数据是共享的

  • 相关阅读:
    BOM
    CSS 定位与浮动
    轮播
    跨域
    Flex-弹性布局
    vue.js开发环境搭建以及创建一个vue实例
    js闭包
    git的一些基本命令
    不定宽块状元素居中方法
    git中常用命令小结
  • 原文地址:https://www.cnblogs.com/846617819qq/p/10973862.html
Copyright © 2011-2022 走看看