最近面试,岗位是安全开发岗。问了较多的网络相关函数。其中关于io多路复用的问题,由于工作中涉及的比较少,回答的一塌糊涂。知耻而后勇,专门整理一遍记录一下这个知识点吧
主要是之前还专门写过一遍笔记用来记录当时的学习情况,还写的挺详细!!!
[toc]
IO多路复用
概念
顾名思义,就是可以多个可以重复使用的io(输入\输出)。
-
多路:核心需求是要用尽可能少的线程来处理尽可能多的连接,这里的多路是指需要处理的众多连接。
-
复用:核心需求是要求使用尽可能少的线程,尽可能减少系统开销去处理尽可能多的连接,那么这个复用是指利用有限的资源。也就是说利用有限的资源去处理尽可能多的任务。例如:在阻塞IO中,一个连接需要一个线程去处理,但是在IO多路复用的模型中,则可以使用一个线程去处理多个任务。
参考及引用:
- Linux – IO Multiplexing – Select vs Poll vs Epoll – Developers Area
- Chapter 6. I/O Multiplexing: The select and poll Functions - Shichao’s Notes
- select / poll / epoll: practical difference for system architects | UlduzSoft
- 【并发】IO多路复用select/poll/epoll介绍_哔哩哔哩_bilibili
Demo 示例
Windows 下基于 select() 的单线程多连接服务器 Demo:
- 项目:
Windows-API-Usage\NetWork\IOMultiplexing\IOMultiplexing.vcxproj(已加入BuildProj.sln,NetWork 目录) - 功能:监听 8888 端口,用单个
select()同时等待监听 socket + 所有客户端 socket 的可读事件,单线程回显多路数据。 - 测试:启动后另开多个终端
telnet 127.0.0.1 8888连接即可观察多连接同时处理。