单机高性能网络模型

news2025/1/12 7:59:45

传统网络模型

PPC和prefork

在这里插入图片描述

优点

实现简单

缺点

  1. PPC:fork代价高,性能低
  2. 父子进程通信要用IPC,监控统计等实现会比较复杂
  3. OS的上下文切换会限制并发连接数,一般几百

案例

  1. 世界上第一个Web服务器CERN httpd采用PPC模式
  2. Apache MPM prefork模式,默认256个连接

TPC和prethread

在这里插入图片描述

优点

  1. 实现简单
  2. 无需IPC,线程间通信即可
  3. 无需fork,线程创建代价低

缺点

  1. 线程互斥和共享比PPC/prefork要复杂
  2. 某个线程故障可能导致整个进程退出
  3. OS的上下文切换会限制并发连接数,一般几百,但比PPC/prefork要多

案例

Apache 服务器 MPM worker 模式就是 prethread模式的变种(多进程 + prethread),默认支持16 × 25= 400 个并发处理线程

Reactor网络模型

Reactor:基于多路复用的事件响应网络编程模型

多路复用

多个连接复用同一个阻塞对象,例如Java的Selector、epoll的epoll_fd(epoll_create函数创建)

事件响应

不同的事件分发给不同的对象处理,Java的事件有OP_ACCEPT、OP_CONNECT、OP_READ、OP_WRITE

优缺点

  1. 实现比传统网络模型要复杂
  2. 支持海量连接

Reactor模式

模式1-单 Reactor 单进程/单线程

在这里插入图片描述

  1. Reactor 对象通过 select 监控连接事件,收到事件后通过 dispatch 进行分发
  2. 如果是连接建立的事件,则由 Acceptor 处理,Acceptor 通过 accept 接受连接,并创建一个 Handler 来处理连接后续的各种事件
  3. 如果不是连接建立事件,则 Reactor 会调用连接对应的 Handler(第2步中创建的 Handler)来进行响应。Handler 会完成 read → 业务处理 → send 的完整业务流程

优点

  1. 实现简单,无进程通信,无线程互斥和通信
  2. 无上下文切换,某些场景下性能可以做到很高

缺点

  1. 只有一个进程,无法发挥多核CPU的性能;只能采取部署多个系统来利用多核CPU,但这样会带来运维复杂度
  2. Handler在处理某个连接上的业务时,整个进程无法处理其他连接的事件,可能导致性能瓶颈

案例

Redis

模式2-单 Reactor 多线程

在这里插入图片描述

  1. 主线程中,Reactor 对象通过 select 监控连接事件,收到事件后通过 dispatch 进行分发
  2. 如果是连接建立的事件,则由 Acceptor 处理,Acceptor 通过 accept 接受连接,并创建一个 Handler 来处理连接后续的各种事件
  3. 如果不是连接建立事件,则 Reactor 会调用连接对应的 Handler(第2步中创建的 Handler)来进行响应
  4. Handler 只负责响应事件,不进行业务处理;Handler 通过 read 读取到数据后,会发给 Processor 进行业务处理
  5. Processor 会在独立的子线程中完成真正的业务处理,然后将响应结果发给主进程的 Handler 处理;Handler 收到响应后通过 send 将响应结果返回给 client

优点

充分利用了多核CPU的优势,性能高

缺点

  1. 多线程数据共享和访问比较复杂
  2. Reactor承担了所有事件的监听和响应,只在主线程中运行,瞬时高并发时会成为性能瓶颈

模式3-多 Reactor 多进程/线程

在这里插入图片描述

  1. 父进程中 mainReactor 对象通过 select 监控连接建立事件,收到事件后通过 Acceptor 接收,将新的连接分配给某个子进程
  2. 子进程的 subReactor 将 mainReactor 分配的连接加入连接队列进行监听,并创建一个 Handler 用于处理连接的各种事件
  3. 当有新的事件发生时,subReactor 会调用连接对应的 Handler(即第2步中创建的 Handler)来进行响应
  4. Handler 完成 read → 业务处理 → send 的完整业务流程

优点

  1. 充分利用了多核CPU的优势,性能高
  2. 实现简单,父子进程(线程)交互简单,subReactor子进程(线程)间无互斥共享或通信

缺点

没有明显的缺点,虽然自己实现会很复杂,但是目前已经有非常成熟的开源方案

案例

Memcached、Netty、Nginx等

注意:实现细节都有一些差异,例如Memcached用了事件队列、Nginx是子进程accept

Proactor网络模型

在这里插入图片描述

  1. Proactor Initiator 负责创建 Proactor 和 Handler,并将Proactor和 Handler 都通过 Asynchronous Operation Processor 注册到内核
  2. Asynchronous Operation Processor 负责处理注册请求,并完成I/O 操作
  3. Asynchronous Operation Processor 完成 I/O 操作后通知Proactor
  4. Proactor 根据不同的事件类型回调不同的 Handler 进行业务处理
  5. Handler 完成业务处理,Handler 也可以注册新的Handler 到内核进程

优点

理论上性能要比Reactor更高一些,但实测性能差异不大,大约10%以内

缺点

  1. 操作系统实现复杂,Linux目前对Proactor模式支持并不成熟
  2. 程序调试复杂

案例

Windows IOCP

网络模型对比

在这里插入图片描述

复杂度连接数量应用场景
PPC常量连接,几百内部系统、中间件
prefork常量连接,几百内部系统、中间件
TPC常量连接,几百内部系统、中间件
prethread常量连接,几百内部系统、中间件
Reactor中,程序复杂海量连接,上万互联网、物联网、中间件
Proactor高,OS内核复杂海量连接,上万互联网、物联网、中间件

三种网络模型实战技巧

“多Reactor多线程”是目前已有技术中接近完美的技术方案:

  1. 所有场景
  2. 所有平台
  3. 性能和Proactor接近

直接用开源框架,千万不要自己去实现,例如Netty、libevent(Memcached网络框架)、libuv(node.js底层网络框架)

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

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

相关文章

简单网页制作代码 HTML+CSS+JavaScript香港美食(8页)

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Spring 5有哪些新特性?这份spring5高级编程带你深入剖析,直击P8!

spring Spring 框架可以说是Java 世界最为成功的框架,在企业实际应用中,大部分的企业架构都基于Spring 框架。它的成功来自于理念,而不是技术,它最为核心的理念是IoC (控制反转)和AOP (面向切面…

Flutter高仿微信-第28篇-好友详情-查看个人头像

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.co…

Redis如何实现持久化(AOF、RDB、混合模式)的优缺点

👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: Redis ❤️ 支持我:👍点赞 &#x1f33…

OpenStackds集群部署(一)

一、OpenStack简介 Openstack体系架构 1. Openstack服务之间的关系 2.体系架构 3. 硬件要求 4. 网络架构 1.1 什么是OpenStack OpenStack是把一堆计算机资源和一堆存储服务器放到世界上不同的地方,然后通过这个OpenStack提供的不同服务程序连接起来&#xff0…

Linux(基于Centos7)(二)

文章目录一、任务介绍二、任务实施三、任务扩展一、任务介绍 Linux服务器配置与管理(基于Centos7.2)任务目标(一) 实施该工单的任务目标如下: 知识目标 1、熟悉Linux文件权限的表示方法。 2、了解改变文件权限的两种…

使用内存技术实现 HTAP 的可行性

万籁 “俱寂” 时,一家知名 IT 研究与顾问咨询机构的发声,给关系型数据库这个平静的池塘丢了颗巨石:2014 年,Gartner 正式提出了 HTAP 这个概念。 Gartner’s definition in 2014: utilizes in-memory computing technologies to …

查阅必备----常用的SQL语句,配语句和图解超详细,不怕你忘记

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐查阅必备–常用的SQL语句⭐ 文章目录⭐查阅必备--常用的SQL语句⭐一,关键语句大全&am…

驱动——设备树属性获取相关实验

完成设备树属性获取相关实验 通过键名获取数值相关API获取设备树属性 1、要获取的属性如下所示&#xff1a; /*mynode0x12345678{ compatible "hqyj,mynode";//字符串 astring"hello 22071";//字符串 uint <0xaabbccdd 0x11223344>;//32位无符号…

SpringBoot SpringBoot 开发实用篇 6 监控 6.5 health 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.5 health 端点指标控制6.5.1 问题引入6.5.2 health 端点指标…

十二、虚拟 DOM 和 render() 函数(1)

本章概要 虚拟DOMrender()函数 Vue.js 之所以执行性能高&#xff0c;一个很重要的原因就是它的虚拟 DOM 机制。 12.1 虚拟 DOM 浏览器在解析 HTML 文档时&#xff0c;会将文档中的元素、注释、文本等标记按照它们的层级关系组织成一棵树&#xff0c;这就是熟知的 DOM 树。元…

MCE | LYTAC 与靶向蛋白降解技术

靶向蛋白降解 (TPD) 是一种有效性的&#xff0c;高度选择性的诱发蛋白降解方式。近年来&#xff0c;以 PROTAC 为代表的 TPD 技术的研究如火如荼。PROTAC 主要降解的是胞内蛋白&#xff0c;实际上&#xff0c;有 40% 的基因产物为胞外和膜相关蛋白&#xff0c;如生长因子、细胞…

一种新的数据聚类启发式优化方法——黑洞算法(基于Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【学习QT必备的C++基础】C++类和对象

文章目录C类的定义和对象的创建详解类的定义创建对象访问类的成员使用对象[指针](http://c.biancheng.net/c/80/)总结C类的成员变量和成员函数详解在类体中和类体外定义成员函数的区别C类成员的访问权限以及类的封装简单地谈类的封装对private和public的更多说明C对象的内存模型…

异构网络小入

A Survey of Heterogeneous Information Network Analysis Heterogeneous Graph Attention Network 异构网络很火吗&#xff1f; 在一个网络中&#xff0c;不用节点的类型不同&#xff0c;这是肯定的。 所以&#xff0c;异构网络在表征比较复杂的情形时&#xff0c;是比较合适…

低代码引擎半岁啦,来跟大家唠唠嗑...

作者&#xff1a;刘菊萍(絮黎) 之前低代码引擎一直是在阿里集团内部进行孵化的&#xff0c;对外开源算是一次新生。从2022年3月23日开源至今&#xff0c;我们的低代码引擎已经半岁了&#xff0c;希望借这个机会来跟大家唠唠嗑。 开源地址&#xff1a;https://github.com/aliba…

WeOps上新|V3.12版本提升网络设备的自动化能力

本次WeOpsV3.12版本更新主题总结为&#xff1a; 持续补充自动发现能力&#xff0c;覆盖网络设备和数据库扩充自动化运维&#xff0c;支持网络设备脚本工具内置AD账号自动化流程&#xff0c;支持AD账号创建/密码重置/删除增加监控告警移动端&#xff0c;覆盖更多场景优化凭据管…

WebDAV之葫芦儿·派盘+人生Life

人生Life 支持webdav方式连接葫芦儿派盘。 自己经常容易忘记的情,后来便记录在便签中,以作提醒和备忘;但是到了时间还是会因时间安排不妥冲突而无法完成,拖拖拉拉、还是很乱,总是会忘记会议、想不起重要的行程,非常烦恼;直到体验了人生Life这几款日程、待办事情的APP后…

WordPress图片自动添加alt标签和title的两种方法(插件or代码)实例

使用WordPress家长朋友知道&#xff0c;上传图片的时候是不会自动添加alt标签的&#xff0c;从seo和用户体验来看&#xff0c;图片加alt标签还是非常非常重要的。 WordPress自动给图片添加alt标签和title的两种方法&#xff08;插件or代码&#xff09;实例Alt信息&#xff1a; …

MemArts :高效解决存算分离架构中数据访问的组件

摘要&#xff1a;计算侧需要一个高速的缓存层来消除计算集群和OBS之间的数据访问鸿沟。为了解决这个问题&#xff0c;提出MemArts CC分布式客户端缓存。本文分享自华为云社区《华为云全新缓存生态组件MemArts》&#xff0c;作者&#xff1a; MichaelYun。 公有云的基础设施都是…