select,poll,epoll

select,poll,epoll

 

文件描述符fd 

文件描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

————————————————

1.java网络编程使用IO,每一个链接都需要一个单独的线程(对java来说是线程)服务,没有通信时线程阻塞;

2.select模式,一个线程可以为多个链接服务(多路复用);

a.所有链接都没有数据传输时,线程将其管理的所有连接(文件描述符)交给操作系统(描述符从用户空间复制到内核空间),由操作系统监控;进程阻塞;

b.当其中有一个连接有数据传输时,操作系统通知线程(描述符从内核空间复制到用户空间)

c.线程遍历所有连接(文件描述符)找到需要处理的连接;

2.1.主要缺点:

a.单个线程能监控的连接(文件描述符)有限为1024;

b.需要维护一个存放描述符的数据结构,内核与用户空间复制开销大;

c.遍历描述符时线性扫描(轮询);

3.poll

a.相比于select,取消了1024限制,但其他缺点仍然存在;

4.epoll

a.取消1024限制;

b.效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。只有活跃可用的FD才会调用callback函数;

即Epoll最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll的效率就会远远高于select和poll