18 | 单服务器高性能模式:PPC与TPC
该思维导图由 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-074197 - Regular我怎么觉得,凡是高并发请求的系统都适合本节讲的高性能模式?!
作者回复: 高并发需要根据两个条件划分:连接数量,请求数量。 1. 海量连接(成千上万)海量请求:例如抢购,双十一等 2. 常量连接(几十上百)海量请求:例如中间件 3. 海量连接常量请求:例如门户网站 4. 常量连接常量请求:例如内部运营系统,管理系统 你再尝试分析一下看看😃
2018-06-076111 - W_T老师在文章和留言里已经透露答案了。 首先,PPC和TPC能够支持的最大连接数差不多,都是几百个,所以我觉得他们适用的场景也是差不多的。 接着再从连接数和请求数来划分,这两种方式明显不支持高连接数的场景,所以答案就是: 1. 常量连接海量请求。比如数据库,redis,kafka等等 2. 常量连接常量请求。比如企业内部网址
作者回复: 回答正确😃😃
2018-06-08291 - JackLei看到这篇文章,这个专栏的价值远远远远远远远远远远远远远远远远大于专栏购买的价格。
作者回复: 这篇这么值呀😄其实我觉得前面的更值,架构本质,架构设计目的,架构设计原则,架构设计流程……都是就此一家,别无分店😄
2018-06-13239 - 正是那朵玫瑰根据华仔回复留言的提示,分析下 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-08338 - peison请教一个比较小白的问题…为什么说门户网站是海量连接常量请求的情况?海量连接下为什么会常量请求,一直想不通
作者回复: 海量连接:连接的用户很多 常量请求:每个用户请求数量不多,大部分都是看完一篇文章再去点击另外的文章
2018-07-24531 - 孙晓明李老师,看完文章后查了一下bio和nio,还有一种aio,看的不是太明白,能麻烦您解答一下,并且它与nio的差别在哪里?
作者回复: bio:阻塞io,PPC和TPC属于这种 NIO:多路复用io,reactor就是基于这种技术 aio:异步io,Proactor就是基于这种技术
2018-06-22421 - 云学希望再多写几篇讲解单机性能优化,比如线程模型,数据库,网络等,猜测下一篇讲IO复用了吧
作者回复: 具体的技术细节点好多,专栏聚焦架构。 一些常见的细节点如下: java:推荐看disruptor的设计论文,包括false sharing, 并发无锁,ring buffer等; 网络:tcp_nodelay,NIO; 内存:内存池,对象池,数据结构 存储:磁盘尾部追加,LSM;
2018-06-0718 - 胖胖的程序猿1. 海量连接(成千上万)海量请求:例如抢购,双十一等 2. 常量连接(几十上百)海量请求:例如中间件 3. 海量连接常量请求:例如门户网站 4. 常量连接常量请求:例如内部运营系统,管理系统 这个不理解,连接和请求有什么区别
作者回复: 一个连接就是TCP连接,一个连接每秒可以发一个请求,也可以发几千个请求
2019-04-01417 - 无聊夫斯基我无法想到ppc比tpc更适合的场景
作者回复: tpc异常时整个服务器就挂了,而ppc不会,所以ppc适合数据库,中间件这类
2018-08-22517