IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 《从 0 开始学架构》精华总结-单服务器高性能模式PPC与TPC、Reactor与Proactor -> 正文阅读

[系统运维]《从 0 开始学架构》精华总结-单服务器高性能模式PPC与TPC、Reactor与Proactor

声明:学习完李运华《从 0 开始学架构》,有一种醍醐灌顶,豁然开朗的感觉。为了能够对其概念有一个深入的理解,并且掌握其总结的方法论。特意对本课程做一个提炼,形成自己的知识体系。毕竟能给别人讲清楚了,才能说明自己真的掌握了。本文的引用仅限自我学习如有侵权,请联系作者删除。

高性能架构设计的设计点在哪里?

(1)尽量提升单服务器的性能,将单服务器的性能发挥到极致。

(2)如果单服务器无法支撑性能,设计服务器集群方案。

(3)具体的实现及编码,架构设计决定了系统性能的上限,实现细节决定了系统性能的下限。

单服务器高性能的关键点是什么?

(1)服务器如何管理连接(I/O 模型:阻塞、非阻塞、同步、异步)

(2)服务器如何处理请求(进程、多进程、多线程)

单服务器高性能模式有哪些?

(1)PPC:Process Per Connection,每次有新的连接就新建一个进程去专门处理这个连接的请求。

图片

变体prefork:PPC 模式中,当连接进来时才 fork 新进程来处理连接请求,由于 fork 进程代价高,用户访问时可能感觉比较慢,prefork 模式的出现就是为了解决这个问题。prefork 就是提前创建进程(pre-fork),让用户访问更快、体验更好。如下:

图片

应用场景:prefork 模式和 PPC 一样,还是存在父子进程通信复杂、支持的并发连接数量有限的问题,因此目前实际应用也不多

(2)TPC:Thread Per Connection,每次有新的连接就新建一个线程去专门处理这个连接的请求。其含义是指每次有新的连接就新建一个线程去专门处理这个连接的请求。与进程相比,线程更轻量级,创建线程的消耗比进程要少得多;同时多线程是共享进程内存空间的,线程通信相比进程通信更简单。

图片

变体prethread:和 prefork 类似,prethread 模式会预先创建线程,然后才开始接受用户的请求。

图片

应用场景:Apache 服务器会首先创建多个进程,每个进程里面再创建多个线程,Apache 服务器 MPM worker 模式默认支持 16 × 25 = 400 个并发处理线程

(3)Reactor:PPC 模式最主要的问题就是每个连接都要创建进程,连接结束后进程就销毁了,这样做其实是很大的浪费。为了解决这个问题,一个自然而然的想法就是资源复用,即不再单独为每个连接创建进程,而是创建一个进程池,将连接分配给进程,一个进程可以处理多个连接的业务。Reactor 模式也叫 Dispatcher 模式(在很多开源的系统里面会看到这个名称的类,其实就是实现 Reactor 模式的)是“事件反应”的意思。即 I/O 多路复用统一监听事件,收到事件后分配(Dispatch)给某个进程可以理解为"来了一个事件我就有相应的反应",此为"同步"。

应用场景:Nginx 采用的是多 Reactor 多进程的模式。

(4)Proactor:Reactor 是非阻塞同步网络模型,因为真正的 read 和 send 操作都需要用户进程同步操作。这里的“同步”指用户进程在执行 read 和 send 这类 I/O 操作的时候是同步的,如果把 I/O 操作改为异步就能够进一步提升性能,这就是异步网络模型 Proactor。而 Proactor 可以理解为“来了事件我来处理,处理完了我通知你”,此为"异步"。

应用场景:理论上 Proactor 比 Reactor 效率要高一些,异步 I/O 能够充分利用 DMA 特性,让 I/O 操作与计算重叠,但要实现真正的异步 I/O,操作系统需要做大量的工作。目前 Windows 下通过 IOCP 实现了真正的异步 I/O,而在 Linux 系统下的 AIO 并不完善,因此在 Linux 下实现高并发网络编程时都是以 Reactor 模式为主。

我是快乐的一只,一只快乐的我。如果我的文章对你有所帮助,请随手点个在看吧,您的鼓励将是我坚持创作下去最大的动力。

公众号请搜索:“快乐的一只”

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:27:51  更:2022-01-12 00:29:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:29:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码