从 0 开始学架构
李运华
网名“华仔”,前阿里资深技术专家(P9)
152573 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 66 讲
结束语 (1讲)
结课测试 (1讲)
从 0 开始学架构
15
15
1.0x
00:00/00:00
登录|注册

18 | 单服务器高性能模式:PPC与TPC

线程间数据共享和通信方便
创建线程的性能优化
子线程都尝试accept,只有一个成功
主进程accept,线程处理
多线程互相影响的问题
线程间互斥和共享的复杂度
创建线程的性能问题
支持的并发连接数量有限
父子进程通信复杂
fork代价高
例如数据库服务器
服务器连接数较少
prethread模式在性能和稳定性上有优势
TPC引入了新的问题,如线程调度和切换代价
prefork和prethread解决了创建进程/线程的性能问题
prefork和prethread是对PPC和TPC的改进
PPC适用于连接数较少的场景
PPC和TPC是传统的单服务器高性能模式
prethread模式的优势
prethread模式的实现方式
主进程accept,然后交给某个线程处理
预先创建线程
TPC模式的问题
子线程关闭连接
子线程处理连接的读写请求
父进程创建子线程
父进程接受连接
Thread Per Connection
prefork模式的问题
子进程关闭连接
子进程处理连接的读写请求
父进程创建子进程
父进程接受连接
提前创建进程
PPC模式适用场景
子进程关闭连接
子进程处理连接的读写请求
父进程"fork"子进程
父进程接受连接
Process Per Connection
总结
prethread
TPC
prefork
PPC
单服务器高性能模式:PPC与TPC

该思维导图由 AI 生成,仅供参考

高性能是每个程序员的追求,无论我们是做一个系统还是写一行代码,都希望能够达到高性能的效果,而高性能又是最复杂的一环,磁盘、操作系统、CPU、内存、缓存、网络、编程语言、架构等,每个都有可能影响系统达到高性能,一行不恰当的 debug 日志,就可能将服务器的性能从 TPS 30000 降低到 8000;一个 tcp_nodelay 参数,就可能将响应时间从 2 毫秒延长到 40 毫秒。因此,要做到高性能计算是一件很复杂很有挑战的事情,软件系统开发过程中的不同阶段都关系着高性能最终是否能够实现。
站在架构师的角度,当然需要特别关注高性能架构的设计。高性能架构设计主要集中在两方面:
尽量提升单服务器的性能,将单服务器的性能发挥到极致。
如果单服务器无法支撑性能,设计服务器集群方案。
除了以上两点,最终系统能否实现高性能,还和具体的实现及编码相关。但架构设计是高性能的基础,如果架构设计没有做到高性能,则后面的具体实现和编码能提升的空间是有限的。形象地说,架构设计决定了系统性能的上限,实现细节决定了系统性能的下限。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了单服务器高性能模式中的PPC和TPC两种并发模型。文章指出高性能是程序员追求的目标,但实现高性能涉及多个因素,包括服务器的并发模型、操作系统的I/O模型和进程模型等。在介绍PPC模式时,文章详细解释了其流程和适用场景,同时指出了其存在的问题,如fork代价高、父子进程通信复杂以及支持的并发连接数量有限。随后,文章介绍了prefork模式作为PPC的改进方案,但也指出其存在的问题和实际应用不多的情况。接着,文章介绍了TPC模式,指出其相对于PPC的优势和引入的新问题,如创建线程的性能问题、线程间互斥和共享带来的复杂度以及CPU线程调度和切换代价。最后,文章介绍了prethread模式作为TPC的改进方案,指出其实现方式和灵活性,并举例说明了Apache服务器的MPM worker模式。通过对PPC和TPC两种并发模型的介绍,本文帮助读者了解了单服务器高性能模式的设计思路和存在的问题,为读者提供了对高性能架构设计的基础认识。文章内容深入浅出,适合对高性能架构感兴趣的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学架构》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(84)

  • 最新
  • 精选
  • 鹅米豆发
    不同并发模式的选择,还要考察三个指标,分别是响应时间(RT),并发数(Concurrency),吞吐量(TPS)。三者关系,吞吐量=并发数/平均响应时间。不同类型的系统,对这三个指标的要求不一样。 三高系统,比如秒杀、即时通信,不能使用。 三低系统,比如ToB系统,运营类、管理类系统,一般可以使用。 高吞吐系统,如果是内存计算为主的,一般可以使用,如果是网络IO为主的,一般不能使用。

    作者回复: 赞,分析到位

    2018-06-07
    4
    197
  • Regular
    我怎么觉得,凡是高并发请求的系统都适合本节讲的高性能模式?!

    作者回复: 高并发需要根据两个条件划分:连接数量,请求数量。 1. 海量连接(成千上万)海量请求:例如抢购,双十一等 2. 常量连接(几十上百)海量请求:例如中间件 3. 海量连接常量请求:例如门户网站 4. 常量连接常量请求:例如内部运营系统,管理系统 你再尝试分析一下看看😃

    2018-06-07
    6
    111
  • W_T
    老师在文章和留言里已经透露答案了。 首先,PPC和TPC能够支持的最大连接数差不多,都是几百个,所以我觉得他们适用的场景也是差不多的。 接着再从连接数和请求数来划分,这两种方式明显不支持高连接数的场景,所以答案就是: 1. 常量连接海量请求。比如数据库,redis,kafka等等 2. 常量连接常量请求。比如企业内部网址

    作者回复: 回答正确😃😃

    2018-06-08
    2
    91
  • JackLei
    看到这篇文章,这个专栏的价值远远远远远远远远远远远远远远远远大于专栏购买的价格。

    作者回复: 这篇这么值呀😄其实我觉得前面的更值,架构本质,架构设计目的,架构设计原则,架构设计流程……都是就此一家,别无分店😄

    2018-06-13
    2
    39
  • 正是那朵玫瑰
    根据华仔回复留言的提示,分析下 1. 海量连接(成千上万)海量请求:例如抢购,双十一等 这样的系统,我觉得这讲所说的模式都不适应,面对海量的连接至少要使用IO复用模型或者异步IO模型,针对海量的请求,无论使用多进程处理还是多线程,单机都是无法支撑的,应该集群了吧。 2. 常量连接(几十上百)海量请求:例如中间件 常量连接,我觉得这讲的模式应该可以适用,如使用TPC的preyhtead模型,启动几十上百的线程去处理连接,应该问题不大吧,但是老师举的列子是中间件是这类系统,我就有点疑问了,是不是中间件系统都可以是阻塞IO模型来实现,比如activemq既支持BIO也支持NIO,但是NIO只是解决了能处理更多的连接,而真正每个请求的处理快慢还得看后面的业务的处理;而阿里的rocketmq也是使用netty这样的NIO框架实现的。但在面对常量连接的场景下,NIO并没有优势啊。 3. 海量连接常量请求:例如门户网站 这种系统我觉得非常适合使用netty这样的NIO框架来实现,IO复用模型可以处理海量的连接,而每个连接的请求数据量会很小,处理会很长快,如华仔说的门户网站,只要简单返回页面即可。 4. 常量连接常量请求:例如内部运营系统,管理系统 这种系统,本讲的模式就很适合了。 水平有限,望华仔指点下。

    作者回复: 写的很好,你的疑问补充如下: 1. 常量连接模式下NIO除了复杂一点外,也没有缺点,因此也可以用。 2. 海量连接情况下,单机也要支持很多连接,不然集群成本太高

    2018-06-08
    3
    38
  • peison
    请教一个比较小白的问题…为什么说门户网站是海量连接常量请求的情况?海量连接下为什么会常量请求,一直想不通

    作者回复: 海量连接:连接的用户很多 常量请求:每个用户请求数量不多,大部分都是看完一篇文章再去点击另外的文章

    2018-07-24
    5
    31
  • 孙晓明
    李老师,看完文章后查了一下bio和nio,还有一种aio,看的不是太明白,能麻烦您解答一下,并且它与nio的差别在哪里?

    作者回复: bio:阻塞io,PPC和TPC属于这种 NIO:多路复用io,reactor就是基于这种技术 aio:异步io,Proactor就是基于这种技术

    2018-06-22
    4
    21
  • 云学
    希望再多写几篇讲解单机性能优化,比如线程模型,数据库,网络等,猜测下一篇讲IO复用了吧

    作者回复: 具体的技术细节点好多,专栏聚焦架构。 一些常见的细节点如下: java:推荐看disruptor的设计论文,包括false sharing, 并发无锁,ring buffer等; 网络:tcp_nodelay,NIO; 内存:内存池,对象池,数据结构 存储:磁盘尾部追加,LSM;

    2018-06-07
    18
  • 胖胖的程序猿
    1. 海量连接(成千上万)海量请求:例如抢购,双十一等 2. 常量连接(几十上百)海量请求:例如中间件 3. 海量连接常量请求:例如门户网站 4. 常量连接常量请求:例如内部运营系统,管理系统 这个不理解,连接和请求有什么区别

    作者回复: 一个连接就是TCP连接,一个连接每秒可以发一个请求,也可以发几千个请求

    2019-04-01
    4
    17
  • 无聊夫斯基
    我无法想到ppc比tpc更适合的场景

    作者回复: tpc异常时整个服务器就挂了,而ppc不会,所以ppc适合数据库,中间件这类

    2018-08-22
    5
    17
收起评论
显示
设置
留言
84
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部