美文网首页
select、poll、epoll 区别总结

select、poll、epoll 区别总结

作者: 汤建华 | 来源:发表于2017-10-02 17:42 被阅读0次

    1、支持一个进程所能打开的最大连接数

    select:

    单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是32*32,同理64位机器上FD_SETSIZE为32*64),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响,这需要进一步的测试。

    poll :

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

    epoll:

    虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接

    2、FD剧增后带来的IO效率问题

    select:

    因为每次调用时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的“线性下降性能问题”。

    poll:

    同上

    epoll:

    因为epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题,但是所有socket都很活跃的情况下,可能会有性能问题。

    3、 消息传递方式

    select:

    内核需要将消息传递到用户空间,都需要内核拷贝动作

    poll:

    同上

    epoll:

    epoll通过内核和用户空间共享一块内存来实现的。

    总结:

    综上,在选择select,poll,epoll时要根据具体的使用场合以及这三种方式的自身特点。

    1、表面上看epoll的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。

    2、select低效是因为每次它都需要轮询。但低效也是相对的,视情况而定,也可通过良好的设计改善

    相关文章

      网友评论

          本文标题:select、poll、epoll 区别总结

          本文链接:https://www.haomeiwen.com/subject/jvstyxtx.html