【Netty的线程模型】

Netty的线程模型

  • Netty的线程模型
  • 知识拓展
    • 单Reactor单线程模型
    • 单Reactor多线程模型
    • 主从Reactor模型

Netty的线程模型

Netty通过Reactor模型基于多路复用器接收并处理用户请求的,多路复用IO模型参考:
多路复用IO模型: 操作系统的IO模型有哪些

多路复用就是首先去阻塞的调用系统,询问内核数据是否准备好,如果准备好,再重新进行系统调用,进行数据拷贝。常见的实现有selectepollpoll三种。

Netty的线程模型并不是一成不变的,它实际取决于用户的启动参数配置。通过设置不同的启动参数,Netty支持三种模型,分别是Reactor单线程模型Reactor多线程模型Reactor主从多线程模型

知识拓展

单Reactor单线程模型

这是最简单的Reactor模型,当有多个客户端连接到服务器的时候,服务器会先通过线程A和客户端建立连接,有连接请求后,线程A会将不同的事件(比如连接事件、读事件、写事件)进行分发,譬如有IO读写事件之后,会把该事件交给具体的Handler进行处理。

看图:
2.1
而线程A,就是我们所说的Reactor模型中的Reactor,Reactor内部有一个dispatch(分发器)。【注意:这里的Reactor单线程,主要是负责事件的监听和分发】

此时一个Reactor既负责处理连接请求,又要负责处理读写请求,一般来说处理连接请求时很快的,但是处理具体的读写请求就要涉及字节的复制,相对慢太多。Reactor正在处理读写请求的时候,其他的请求只能等着,只有等处理完了,才可以处理下一个请求。

通过一个Reactor线程,只能对应一个CPU,发挥不出来多核CPU的优势。所以,一个Reactor线程处理简单的小容量场景,还是OK的,但是对于高负载来说,还是需要进一步升级。

单Reactor多线程模型

为了利用多核CPU的优势,也为了防止在Reactor线程等待读写事件时候浪费CPU,所以可以增加一个worker的线程池,由此升级为单Reactor多线程模式。

看图:
在这里插入图片描述
整体流程如下:

当多个客户端进入服务器后,Reactor线程会监听多种事件(比如连接事件、读事件、写事件),如果监听到连接事件,则把该事件分配给acceptor处理,如果监听到读事件,那么则会发起系统调用,将数据写入内存,之后再把数据交给工作线程池进行业务处理。

这个时候我们会发现,业务处理的逻辑已经编程多线程处理了。不过一个Reactor既要负责连接事件,又要负责读写事件,同时还要负责数据准备的过程。因为copy数据是阻塞的,假如说Reactor阻塞到拷贝数据的时候,服务器进来了很多连接,这个时候,这些连接是很有可能会被服务器拒绝掉的。

So,单个Reactor看来是不够的,我们需要多个Reactor来处理。

主从Reactor模型

在主从Reactor模型中,主Reactor线程只负责连接事件的处理,它把读写事件全部交给了子Reactor线程,这样即使在数据准备阶段子线程被阻塞,主Reactor还是可以处理连接事件。巧妙的解决了高负载下的连接问题。

看图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/269555.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT圈茶余饭后的“鄙视链” C,C++,Java,Python

目录 C语言的自尊心 C语言的历史与地位 C语言的支持者心态 鄙视链的表现 自尊心的盲点 C的复杂之美 多范式编程的复杂性 高度的控制权 模板元编程的奇妙 面向对象的强大 Java的跨平台与舒适感 跨平台性的优势 舒适的开发体验 对其他语言的轻蔑 面向企业级应用的自…

HTML中常用表单元素使用(详解!)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中常用表单元素使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 …

nodejs微信小程序+python+PHP的外卖数据分析-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

PDF控件Spire.PDF for .NET【转换】演示:将PDF彩色图像转换为灰度(黑白)

将包含彩色图像的 PDF 转换为灰度图像可以帮助您减小文件大小,并以更实惠的模式打印 PDF,而无需消耗彩色墨水。在本文中,您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中以编程方式实现转换。 Spire.Doc 是一款专门对 Word 文档进行操…

chrome浏览器使用flash player

今天用chrome打开学校校园网,显示不出来成绩单提示如下: 结果下了也没用。 Chrome浏览器在2020年12月已经停止支持Flash Player插件,所以无法在Chrome浏览器上使用Flash Player。 使用其他浏览器 如果之前安装了Flash Player插件的小伙伴&…

Cache写策略

目录 一. 写命中二. 写不命中三. 多级Cache(了解即可) \quad CPU修改了cache中的数据副本,如何确保主存中数据母本的一致性? \quad 为何不讨论读命中、读不命中的情况? 因为读不会改变原来的数据 一. 写命中 \quad 写回法 被修改过的数据在被替换的时候会被写回主…

pytest-fixtured自动化测试详解

fixture的作用 1.同unittest的setup和teardown,作为测试前后的初始化设置。 fixture的使用 1.作为前置条件使用 2.fixture的的作用范围 1.作为前置条件使用 pytest.fixture() def a():return 3def test_b(a):assert a3 2.fixture的作用范围 首先实例化更高范围的fixture…

海思越影系列3516DV500/3519DV500/3519AV200/SD3403平台的AI一体化工业相机设计思路

随着工业自动化的发展,生产线对机器视觉的数量要求越来越多,由于数量的增加,视觉系统占的空间也越来越大,给生产线的布局带来困扰。 另一方面随着视觉SOC的发展,越来越多的视觉SOC都逐渐带有一定的算力,一体…

自动化测试基础知识:什么是自动化测试?需要学习哪些知识与工具!

1、自动化测试概念 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常, 在设计了测试用例并通过评审之后,由测 试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。简言之,自动化测试…

得帆云为玉柴打造CRM售后服务管理系统,实现服务全过程管理|基于得帆云低代码的CRM案例系列

广西玉柴机器股份有限公司 广西玉柴机器股份有限公司始建于1992年,是国内行业首家赴境外上市的中外合资企业,产品远销亚欧美非等180多个国家和地区。公司总部设在广西玉林市,下辖11家子公司,生产基地布局广西、江苏、安徽、山东等…

实验8:游标和存储过程

【实验目的】 1、了解游标、存储过程的作用 2、熟悉游标和存储过程的特点 3、掌握游标的使用步骤和存储过程的创建和管理 【实验设备及器材】 1、硬件:PC机; 2、软件:(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 游标…

HTML---列表.表格.媒体元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.列表 无序列表 HTML中的无序列表&#xff08;Unordered List&#xff09;用于显示一组项目&#xff0c;每个项目之前没有特定的顺序或编号。无序列表使用<ul>标签来定义&#xff0c;每…