socket 阻塞模式、非阻塞模式、select、poll、epoll 作者:马育民 • 2020-05-10 11:49 • 阅读:10078 # 介绍 socket发展过程 # 阻塞模式 早期的操作系统,socket是阻塞模式 调用`recv() `函数接收数据,会一直阻塞,直到套接字读取到数据才会返回 优点:开发相对简单 缺点:效率低下 # 非阻塞模式 由于 阻塞模式 的缺点,后来提出非阻塞模式,各主流操作系统都支持此模式 不论套接字有没有数据都会马上返回。没有数据时会返回一个错误 优点:效率高 缺点:编写更多的代码,开发难度较大 # I/O 多路复用( IO multiplexing) 对多个套接字进行统一管理与调度 ### select select是不断轮询去监听的socket,socket个数有限制,一般为1024个(文件描述符为1024,该值可以修改);随着文件描述符数量增加,轮询一回成本增加 各主流操作系统相继支持 select 模型,但不同的操作系统,对 select模型 支持有些诧异,其中 unix、linux相似,功能较强;windows与前两者区别较大 ### poll 是systemV标准,unix、linux支持 poll类似 select,采用轮询方式监听,但没有个数限制 ### epoll 是linux2.6以后出现的内核直接支持的方法,具有了select和poll的一切优点,被认为是linux2.6下最优秀的I/O就绪通知方式 epoll不采用轮询方式去监听,而是当socket有变化时通过回调的方式主动告知用户进程;无最大链接数的限制 原文出处:http://malaoshi.top/show_1EF5UyLVfoB8.html