IO多路复用是什么

2023-11-21 16:40:13 浏览数 (1)

概要

I/O:网络I/O

多路:多个客户端连接 (连接就是套接字描述符,即 socket 或者 channel),指的是多条TCP 连接

复用:用一个进程来处理多条的连接,使用单进程就能够实现同时处理多个客户端的连接

一句话概括:实现了用一个进程来处理大量的用户连接

详讲

例子解释:老师等于进程,学生等于请求

类似考试,一群学生准备考试,监考老师只有一个,学生准备好就举手要考试,老师就给他分配试卷,学生考完主动通知老师交卷。这样老师就可以处理很多学学生。

IO多路复用作用:redis由于处理命令是单线程的,所以当某个IO请求阻塞了,就会导致整个进程无法对其他客户端提供服务,所以就有了IO多路复用,是的redis主线程可以一次处理很多socket请求,提高吞吐量,主线程接收到socket请求之后,会分配对应的事件类型, 比如读,写,或者关闭等操作,然后会创建对应的IO线程进行处理事件,事件处理完毕回通过回调机制通知主线程,表示已完成。这也是Reactor响应模式。

IO多路复用的作用:避免单线程某个IO请求阻塞了,就会导致整个进程无法对其他客户端提供服务。但是,最终事件处理分发还是会创建多个IO线程。

总结

所谓 I/0 多路复用机制,就是说通过一种机制,可以监视多价描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写换作,这种机制的使用需要 select 、 poll 、epol 来配合,多个连接共用一个阻寒对象,应用程序只需要在个阻寒对象上等待,无需阻察等待所有连接。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻寒状态返回,开始进行业务处理。

实际案例:

Nginx,还有典型的例子,Redis为什么那么快,也是使用IO多路复用

Redis设计与实现原话:

​我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞