sellect 、poll 、epoll

select

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

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

3.select 监视socket 连接时不能准确告诉用户是哪个,比如:现在用select监视10000链接,如你要selec

果其中有一个链接有数据了,select就会告诉用户程序,你有select来数据了,那样就只能自己循环100001次判断那个活跃

poll

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

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

epoll

epoll 直到Linux下性能最好的多路io就绪通知方法

1.epoll直到Libux2.6 才出现了由内核直接支持

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

3.epoll最重要的优点是他可以直接告诉用户程序哪一个,比如现在用epoll去监视10000个socket链接

交给内核去检查,现在有一个链接有数据了,epoll会直接告诉用户程序那个链接有数据了

epoll能实现高并发原理

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

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

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

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

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

原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/13836962.html