前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IO多路复用是什么

IO多路复用是什么

原创
作者头像
小明爱吃火锅
发布2023-11-21 16:40:13
4140
发布2023-11-21 16:40:13
举报
文章被收录于专栏:小明说Java小明说Java

概要

I/O:网络I/O

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

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

0
0

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

详讲

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

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

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

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

总结

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

实际案例:

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

0
0

Redis设计与实现原话:

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概要
  • 详讲
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档