Reactor模式基于事件驱动,特别适合处理海量的I/O事件。

1. 单线程模型

Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上处理。

2. 多线程模型

Reactor多线程模型,指的是存在一组NIO线程处理IO操作。

  1. 有一个专门的NIO线程-Acceptor线程用于监听服务端,接收客户端的TCP连接请求。
  2. 网络IO操作-读、写等由一个NIO线程池负责,该线程池包含一个任务队列和N个可用线程,由这些NIO线程负责消息的读取、解码、编码和发送。
  3. 1个NIO线程可以同时处理N条链路,但一个链路只对应一个NIO线程,防止发生并发操作问题。

3. 主从多线程模型

  1. 从主线程池中随机选择一个Reactor线程作为Acceptor线程,用于绑定监听端口,接收客户端连接。
  2. Acceptor线程接收客户端连接请求之后创建新的SocketChannel,将其注册到主线程池的其它Reactor线程上,由其负责接入认证、IP黑白名单过滤、握手等操作。
  3. 步骤b完成之后,业务层的链路正式建立,将SocketChannel从主线程池的Reactor线程的多路复用器上摘除,重新注册到Sub线程池的线程上,用于处理I/O的读写操作。

Reactor模型介绍相关推荐

  1. Reactor模型 介绍

    以下内容转载自 https://www.toutiao.com/i6808729994718609934/ 要无障碍阅读本文,需要对NIO有一个大概的了解,起码要可以写一个NIO的Hello Worl ...

  2. 为什么说Netty是性能之王,因为它用了 Reactor 模型啊

    点击关注公众号,Java干货及时送达 本文将介绍基于进程/线程模型,服务器如何处理请求.值得说明的是,具体选择线程还是进程,更多是与平台及编程语言相关. 例如 C 语言使用线程和进程都可以(例如 Ng ...

  3. 五分钟快速理解 Reactor 模型

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 本文将介绍基于进 ...

  4. ​网络 IO 演变发展过程和模型介绍

    作者:jaydenwen,腾讯 pcg 后台开发工程师 在互联网中提起网络,我们都会避免不了讨论高并发.百万连接.而此处的百万连接的实现,脱离不了网络 IO 的选择,因此本文作为一篇个人学习的笔记,特 ...

  5. 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型

    前言 网络I/O,可以理解为网络上的数据流.通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写.单个socket时,使用一个线程即可高效处理:然而如果是10K个socket连接 ...

  6. Reactor模型-单线程版

    Reactor模型是典型的事件驱动模型.在网络编程中,所谓的事件当然就是read.write.bind.connect.close等这些动作了.Reactor模型的实现有很多种,下面介绍最基本的三种: ...

  7. 基础服务器 IO 模型 Proactor 模型 Reactor 模型 IO 多路复用 异步 IO 模型 Linux 服务器开发 网络编程服务器模型

    本文主要记录服务器的 IO 模型的类型(从多路复用,异步 IO 讲到 Proactor Reactor 模型),包括 Real World nginx 和 apache ,kafka 等分析,配备自洽 ...

  8. 并发模型和I/O模型介绍

    并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见.由于go语言的兴起,CSP模型也越来越受关注.基于锁的共享内存模型 ...

  9. Linux后端服务器网络编程之线程模型丨reactor模型详解

    前言   上一篇文章<后端服务器网络编程之 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程/线程模型的选择.本文将主要介绍传统的和目前流行的进程/线程模型,在 ...

最新文章

  1. Linux怎么关闭ssh和ftp服务,linux ftp启用和停用及vsftpd安装 ssh 启用和停用命令及ssh的安装...
  2. 论坛报名 | 寻找机器感知的最新突破
  3. python爬取抖音评论_怎样用Python3爬取抖音神曲
  4. 解决cvc-complex-type.2.4.a: Invalid content was found starting with element
  5. OXite解读(1)----- 概述
  6. 一阶段结束考核题(链表的嵌套使用)
  7. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之工程创建
  8. tmux鼠标操作配置
  9. c与c++分别是怎样动态分配和释放内存的,有什么区别?(转)
  10. Visual Studio 2013中因Browser Link引起的Javascript错误
  11. VMWare关闭beep声
  12. 安卓ListView行详细内容展示页编写和下拉刷新实现
  13. UOJ#211. 【UER #6】逃跑 (Dynamic Programming)
  14. matlab 傅里叶变换代码,傅里叶变换的原理及matlab实现.doc
  15. Excel合并单元格中间插入斜杠和数字保留一位小数
  16. 解决使用python-igraph绘制网络图时报错AttributeError: plotting not available
  17. django 改端口_django更改默认的runserver端口
  18. ABD-Net: AttentivebutDiversePersonRe-Identification论文阅读
  19. 阿里巴巴惠普_阿里巴巴UCAN设计课程学习笔记
  20. EPLAN教程 | 易盼软件图形系统如何正确使用?

热门文章

  1. 百度高德地图行政区域边界GeoJSON数据获取并绘制行政区域
  2. java阻塞队列和非阻塞队列的区别
  3. MySQL中district_MySQL中distinct语句的基本原理及其与group by的比较
  4. frida.InvalidOperationError: script has been destroyed
  5. 别做操之过急的”无效将军”,做实实在在的”日拱一卒” zz
  6. 安卓动态调试七种武器之孔雀翎 – Ida Pro
  7. 服务器6通道性能,服务器硬件RAID6 月RAID性能参数图文比较
  8. sharding-jdbc 处理分库分表学习
  9. 缺陷程序数据集Defects4J v1.4.0版本的配置
  10. java多态性练习题---主人和狗狗玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5 主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5