欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

select epoll

程序员文章站 2024-02-01 16:25:58
...
    传统的网络编程用select来处理并发访问的问题,但是select随着连接数的增多性能会有明显的下降,同时select所能支持的连接数也有限制,单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32[/size]位的机器上,大小就是32*32,同理64位机器上FD_SETSIZE为32*64)。
     而epoll的引入很好的解决了select出现的这些问题。epoll与select的主要区别如下:
     1、select所支持的连接数有上限,虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接。主要的原因为:select用轮询的方式来实现,每次调用时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的“线性下降性能问题”;而epoll用事件触发的方式来实现,epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题,但是所有socket都很活跃的情况下,可能会有性能问题。
     2、epoll在消息传递方面也做了改进。
     select:内核需要将消息传递到用户空间,都需要内核拷贝动作。
     epoll:使用户空间和内核空间映射到同一内存空间的方法减少了内核态与用户态消息传递所花费的时间。
相关标签: epoll