最近面试,岗位是安全开发岗。问了较多的网络相关函数。其中关于io多路复用的问题,由于工作中涉及的比较少,回答的一塌糊涂。知耻而后勇,专门整理一遍记录一下这个知识点吧

主要是之前还专门写过一遍笔记用来记录当时的学习情况,还写的挺详细!!!

【一文搞懂】FD_SET的使用_欧恩意的博客-CSDN博客

[toc]

IO多路复用

概念

顾名思义,就是可以多个可以重复使用的io(输入\输出)。

  • 多路:核心需求是要用尽可能少的线程来处理尽可能多的连接,这里的多路是指需要处理的众多连接。

  • 复用:核心需求是要求使用尽可能少的线程,尽可能减少系统开销去处理尽可能多的连接,那么这个复用是指利用有限的资源。也就是说利用有限的资源去处理尽可能多的任务。例如:在阻塞IO中,一个连接需要一个线程去处理,但是在IO多路复用的模型中,则可以使用一个线程去处理多个任务。

参考及引用:

Demo 示例

Windows 下基于 select() 的单线程多连接服务器 Demo:

  • 项目:Windows-API-Usage\NetWork\IOMultiplexing\IOMultiplexing.vcxproj(已加入 BuildProj.sln,NetWork 目录)
  • 功能:监听 8888 端口,用单个 select() 同时等待监听 socket + 所有客户端 socket 的可读事件,单线程回显多路数据。
  • 测试:启动后另开多个终端 telnet 127.0.0.1 8888 连接即可观察多连接同时处理。