嵌入式之select、poll、epoll 区别总结篇

1、支持的最大连接数
(1)select
select的文件描述符是由unsigned long型、大小为32的数组管理,每一位代表一个文件描述符,在32位中,支持少于1024个文件描述,在64位机中,支持少于2048个文件描述。select支持的最大连接数是受限的。
(2)poll
只受限于进程限制与系统限制(即进程和系统最多允许同时打开文件数)和内存大小,调整进程限制与系统限制后,poll连接数就取决于内存大小了。poll文件描述符是基于链表来存储的。
(3)epoll
只受限于进程限制与系统限制(即进程和系统最多允许同时打开文件数)和内存大小,调整进程限制与系统限制后,epoll连接数就取决于内存大小了。

注:select、poll、epoll 都是会受到进程限制与系统限制(即进程和系统最多允许同时打开文件数)和内存大小的限制。

2、IO效率问题(轮询时间复杂度)
(1)select
每次调用select,都需要把fd集合从用户态拷贝到内核态,同时同时每次调用select都需要在内核遍历传递进来的所有fd,开销较大,所以随着描述符的增加会造成遍历速度慢的“线性下降性能问题”。select无差别轮询复杂度为O(n)。
(2)poll
poll与select一样,轮询复杂度为O(n)。
(3)epoll
epoll采用基于事件的就绪通知方式,epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。epoll的处理描述符的时间复杂度为O(1)。
3、 消息传递方式
(1)select
描述符集合从用户空间copy到内核空间,检测完成之后,又要把检测的结果集合从内核空间copy到用户空间,开销会比较大。
(2)poll
同上
(3)epoll
采用内存映射(mmap),减少文件描述符在系统调用时复制的开销

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

2、在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。

ulimit 命令操作
对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。修改上述限制的最简单的办法就是使用ulimit命令:
ulimit 用于shell启动进程所占用的资源,可用于修改系统资源限制
-H 设置硬资源限制.
-S 设置软资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
-u <程序数目>  用户最多可开启的程序数目
实例:
ulimit -n --查看进程的文件描述符上限。
cat /proc/sys/fs/file-max 系统最多允许同时打开(即包含所有用户打开文件数总和)的文件数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值