网络线程模型

news2024/11/19 11:25:18

  • 堵塞IO模型:每个连接都由独立的线程进行处理。当并发度较高时系统资源占用较大,并且如果线程发生了IO堵塞还会浪费线程资源
  • Reactor模型:reactor线程监听,并分发事件给相应的handler
  • Proactor模型:交由系统进行异步处理,感知完成的处理事件

Reactor模型

单reactor单线程

  1. reactor通过io复用接口监听客户端请求事件,然后进行分发

  2. 若是建立连接请求事件,则由acceptor接受请求,然后创建handler处理具体业务处理

    若非建立连接请求,直接交由相应handler进行处理

单线程模式简单,没有多线程、进程通信、竞争问题,但是也无法发挥多核CPU性能,并且在线程意外终止或者进入死循环的情况下容易导致整个故障

更加适合io密集型的场景,比如redis

单reactor多线程

  1. reactor通过io复用接口监听客户端请求事件,然后进行分发

  2. 若是建立连接请求事件,则由acceptor接受请求,然后创建handler处理具体业务处理

    若非建立连接请求,直接交由相应handler进行响应

  3. handler接受事件之后分发worker线程池进行具体业务处理

多线程模式充分利用了多核处理能力,只是单reactor监听、分发、响应容易在高并发情况下成为性能瓶颈

主从reactor多线程

  1. main reactor负责监听客户端请求事件,并分发

  2. 若是建立连接请求事件,则由acceptor进行连接

    若非建立连接请求,直接交由sub reactor将连接加入到连接队列进行监听,并创建handler处理

  3. handler读取数据后,再交予worker线程池处理

主从reactor模式相对来说还是比较复杂的

Proactor模型

proactor采用异步网络,感知已完成的io事件。

  • initiator:初始化异步操作;向异步操作处理器注册completion dispatcher、completion handler
  • completion handler(acceptor, http handler):由应用程序实现的用于异步操作完成通知的completion handler接口。
  • asynchronous operation:异步操作代表应用执行请求(例如I/O和定时器操作)。当应用程序调用异步操作时,这些操作不会借用应用程序的控制线程。因此,从应用程序的角度来看,操作是异步执行的。
  • asynchronous operation processor:执行异步操作。由系统实现
  • completion dispatcher:在异步操作完成之后负责回调completion handler。当异步操作处理器完成一个异步发起的操作时,完成分派器代表它执行一个应用程序回调。

以下是proacotr网页服务器发起http GET请求的演示

在这里插入图片描述

  1. client发起GET请求
  2. 由系统读取完毕之后通知completion dispatcher
  3. completion dispatcher通知http handler处理
  4. http handler解析请求
  5. http handler同步读取请求文件
  6. http handler初始化异步处理,去写入数据到client连接,并将自己作为一个Completion handler和一个Completion Dispatcher的引用传递给http handler,该引用将用于在异步写入完成时通知http handler;
  7. 当写入操作完成之后,系统通知completion dispatcher
  8. completion dispatcher通知completion handler

Ref

  1. https://www.cnblogs.com/chenssy/p/15440348.html
  2. https://cloud.tencent.com/developer/article/1488120
  3. https://www.dre.vanderbilt.edu/~schmidt/PDF/Proactor.pdf

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海岸带地物分类步骤

1.读取图像 使用 Envi 打开 imageKSC.tif 影像。在 Toolbox 工具栏中选择 Spectral->Build 3D Cube。在 3D Cube File 对话框中选择高光谱数据集,显示信息为 614*512*176 的高光谱影像,单击 OK 按钮。 图1 原始影像 2.选择波段 当打开 3D Cube RGB…

垃圾回收的核心知识点解析

目录 检测垃圾引用计数算法可达性分析算法 回收垃圾标记清除算法复制算法标记整理算法分代算法 Java运行时内存中的程序计数器、虚拟机栈、本地方法栈这三部分区域其生命周期与相关线程有关,随线程而生,随线程而灭。而程序计数器就是一个单纯存地址的整数…

Oracle Apex制作一个简单的交互式报表页面

简单查询一下: select ID,NAME,DESCRIPTION,PRICE from "FOOD_MENU" a 查询结果 创建交互式报表 工作报表展示 菜单报表展示 页设计器 改变布局样式 记得保存!!! 修改标签内容 添加验证&更改必填项 啥也…

BI-SQL丨XML

XML SQL Server中,存在一种特殊类型的数据,就是XML数据类型。 可能看到这里,小伙伴都会产生疑惑,XML不是Web语言么?为什么在SQL Server里面也会有XML数据类型? 这个就要从SQL Server的应用开始说起了&am…

自动驾驶MCU 软件架构说明

目录 1 文档... 2 1.1.1 变更历史... 2 1.1.2 Term.. 2 1.1.3 引用文档... 2 2 MCU软件框架图... 3 3 模块介绍... 3 文档 变更历史 版本Version 状态 Status 内容 Contents 日期 Date 撰写 Editor 批准 Approver V0.1 …

智慧工厂:如何打造工厂安全生产AI视频监管与风险预警系统?

一、背景需求 现代工厂多是机械操作,少量人员看守,甚至是无人化管理模式。企业都会在生产车间、仓库等重点区域安置摄像头留存画面用作回溯依据。但问题出现后再溯源,或许已经造成严重的生命安全事故和财产损失了。因此,对工厂各…

数据库技术与应用——目录篇

数据库技术与应用目录 文章目录 第1章 数据库基础知识数据库技术的概念数据管理的发展数据库的体系结构数据库管理系统常用的数据库管理系统介绍 第2章 信息得三种世界与数据模型信息的三种世界及其描述数据模型 第3章 关系模型关系模型的由来关系数据库的结构关系代数关系演算…

【算法练习】双指针

目录 移动零复写零快乐数盛最多水的容器有效三角形的个数和为s的两个数三数之和四数之和 移动零 算法原理: 数组划分(数组分块) 两个指针作用: cur:从左到右扫描数组,遍历数组 dest:已处理的区间内,非零元素…

比Wi-Fi快100倍!Li-Fi无线传输标准802.11bb正式发布:带宽高达224GB/s

大家对Wi-Fi可以说耳熟能详,最新标准已经演进到802.11be,即Wi-Fi 7,理论速率可达30Gbps。 现在,更强的来了。 IEEE今日正式签署802.11bb无线传输标准,即Li-Fi,基于光波的无线传输。 Li-Fi支持者认为&#x…

Appium+python自动化(五)- 模拟器(超详解)

简介 Appium是做安卓自动化的一个比较流行的工具,对于想要学习该工具但是又局限于或许当前有些小伙伴没 android 手机来说,可以通过安卓模拟器来解决该问题,下面就讲解使用appium连接安卓模拟器的操作步骤。而宏哥是由于手机数据线问题&#…

【大数据Hive】Hive 内部表与外部表使用详解

目录 一、hive 内部表简介 1.1 查看内部表信息 二、hive 外部表简介 三、内部表与外部表对比 四、内部表与外部表操作演示 4.1 内部表操作 4.1.1 数据准备 4.1.2 建表sql 4.2 外部表操作 4.2.1 建表sql 4.2.2 上传数据文件到 /stu目录 4.2.3 内部表删除 4.2.4 外部…

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。 1,软著申请三要素2,源代码合成软件SourceConvert2.1 启动文件2.2 Spring项目源代码格式2.2.1 规律的包名2.2.2 核心文件 3,Sour…

[QT编程系列-10]:C++图形用户界面编程,QT框架快速入门培训 - 4- QT画图与动画

目录 4. QT画图与动画 4.1 QT的绘图系统 4.2 案例目标 4.3 绘制过程 4.4 更换控件的icon 4.5 案例2 4.6 坐标轴 4. QT画图与动画 4.1 QT的绘图系统 QT(也称为Qt Framework)是一种流行的跨平台应用程序开发框架,它提供了丰富的图形用户…

网页无插件播放265/264视频/监控大屏/GPU解码

网页无插件播放265/264视频/监控大屏/GPU解码 先看效果 特点 GPU解码,chrome网页播放32路 h256/hevc 直播视频流,毫无压力。提供1分屏、4分屏、8分屏、9分屏、16分屏、32分屏、64分屏分屏切换不会停止播放GPU解码、无插件播放自动识别264/265,并且都是…

飞控学习笔记-梯度下降算法(gradient descent algorithm)

简介 笔记来源于文章:An_efficient_orientation_filter_for_inertial_and_inertial_magnetic_sensor_arrays 共轭: 四元数叉乘: 欧拉角等式:

vue-springboot美食商城网站的设计与实现0fh04

美食网站是在的数据存储主要通过MySQL。用户在使用应用时产生的数据通过Java语言传递给数据库。通过此方式促进美食信息流动和数据传输效率,提供一个内容丰富、功能多样、易于操作的平台。述了数据库的设计,系统的详细设计部分主要论述了几个主要模块的详…

一文阐明死锁的成因及解决方案

死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 目录 一、死锁的几种情况 1、一个线程,一把锁(上面同一线程给同一对象加两…

stm32PID调参实验

使用了增量式PID,有点难调,数据一直在波动。实际中调参具有很大的不确定性,因为你这次调好了,下次再供电发现又不是那么回事。按照网上传统的调参方法,一般是先调P,I和D为0,逐渐增大P使得实际值快速到达目标…

【API生命周期看护】API监控与运维

一、基本概念 当接口完成发布、上线后,就进入了正常的运行与维护状态。此时,对于API本身的监控与运维则变得尤为重要,这是保障服务功能可用、SLA达成的重要手段。 监控与运维本身是一个非常大的概念,从DevOps这一词汇中也能看出…

Linux下做性能分析6:理解一些基础的CPU执行模型

[介绍] 前面介绍了两个典型的调度模型,如果调度没有问题,剩下的问题就是正面刚算法了。那个不是我这里要介绍的主题的。 但,Not Really。其实除了算法在消耗CPU,CPU还是有很多余力可以挖掘的,这一篇我们专门讨论一下…