当前位置: 首页 > news >正文

梳理下我自已对Reactor与及IO多路复用的select\poll\epoll的理解

Reactor是一种设计思想的落地,其中IO多路复用的具体落地:select\poll\epoll。都是基于Reactor的延伸。它的核心是Reactor与资源处理器。Reactor负责监听与事件的分发,事件包括连接事件、读事件、写事件。

具体的流程是系统调用监听请求,判断请求是连接、读或写。它是非阻塞同步的,这里的非阻塞同步是指,监听请求这个过程非阻塞,

怎么个非阻塞法?

通过IO多路复用,用select 或poll或epoll。

如果是阻塞IO,假定我分配了一个线程来处理100个请求,IO阻塞在第一个请求入口直到请求过来且跑完才切换。如果是非阻塞IO,IO会让系统调用轮询1-100请求入口,哪个请求连接了就处理那个

非阻塞同步的意思就是通过Reactor的IO多路复用(select或poll或epoll)实现非阻塞监听,然后监听到连接后,将数据从用户态搬运到内核态则是同步,业务处理完将数据从内核移到用户也是同步

而Proactor则可以既是非阻塞监听也可以异步搬运数据,但linux不支持,windlows倒是支持了。

至于select。你可以把它看作一个while循环,循环内看有没连接连上,poll则是基于select的一些优化仍然可以看作是while循环。epoll则是异步回调。

所以总的来说,Reactor先是通过IO多路复用,非阻塞地监听到是否有请求连接过来了,再分发到资源处理器负责处理具体的(连接、读、写)事件。在资源处理器中请求数据由用户态同步到内核或内核同步到用户。

一些网上总结:

Redis是单Reactor单进程的

memcache与netty都是多Reactor与多线程

nginx是多Reactor多进程

http://www.lryc.cn/news/160192.html

相关文章:

  • 4. 广播变量
  • GPT 内部 — I : 了解文本生成
  • 平板触控笔哪款好用?好用的第三方apple pencil
  • Mac 上更新系统PATH环境变量
  • Visual Studio Code 终端配置使用 MySQL
  • 12 | 使用 Spark SQL执行CURL
  • 容器编排学习(七)控制器介绍与使用
  • 一文看懂微信小程序新版隐私协议(附带弹窗组件)
  • Java认识异常(超级详细)
  • 危险边缘:揭示 Python 编程中易被忽视的四个安全陷阱
  • 抖店开通后,新手必须要知道的几个做店技巧,建议认真看完
  • FPGA时序分析与约束(5)——时序路径
  • Flutter:构建跨平台应用的未来选择
  • 08_瑞萨GUI(LVGL)移植实战教程之LVGL对接串口打印
  • 【LeetCode75】第五十题 无限集中的最小数字
  • 关于 Unity 连接 MuMu 模拟器上的 Unity Remote 5 的方法
  • OpenCV 02(色彩空间)
  • 【动手学深度学习】--循环神经网络
  • 快捷支付是什么?怎么申请支付接口?
  • 【MySQL】数据库基础知识
  • 算法训练day36|贪心算法 part05(重叠区间三连击:LeetCode435. 无重叠区间763.划分字母区间56. 合并区间)
  • [Android] AndroidManifest.xml 详解
  • idea远程debug调试
  • 离散化,树状数组,P5459 [BJOI2016] 回转寿司
  • 论文复现--VideoTo3dPoseAndBvh(视频转BVH和3D关键点开源项目)
  • JS 检查某个值是否为某个类的实例
  • 生动理解深度学习精度提升利器——测试时增强(TTA)
  • Redis基础知识(四):使用redis-cli命令测试状态
  • 【web开发】4、JavaScript与jQuery
  • 关于el-date-picker组件修改输入框以及下拉框的样式