PPC与TPC

396 阅读2分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。

为了提高服务器的性能,我们需要提高系统每一个环节,如磁盘、操作系统、cpu、内存、缓存、网络、语言、架构等,每个环节都有可能影响到系统的性能。

架构设计决定了系统性能的上限,但实现细节决定了系统性能的下限。单个服务器提高性能的关键之一就是服务器采取的并发模型,并发模型的设计要点有两个:

  • 如何管理连接
  • 如何处理请求 以上两个设计点,都和系统的 io 模型和进程模型相关:
  • io 模型:阻塞、非阻塞、同步、异步
  • 进程模型:单进程、多进程、多线程 有两个常用的单机高性能模式:PPC 与 TPC

PPC

首先,我们介绍下 PPC,process per connection,即每有一个新的连接,都起一个新的进程去处理这个连接的请求,这也是传统 unix 网络服务器采取的模型。 PPC 的流程为:

  • 父进程接受连接
  • 父进程 fork 一个子进程
  • 子进程处理连接读写请求
  • 子进程处理完请求后关闭连接 这个方式有几个弊端:
  • fork 进程开销较大,即使用了 copy on write
  • 进程间通信较为复杂
  • 同时支持的并发数低,通常为几百,因为 cpu 频繁在进程间切换 prefork 技术是提前把进程创建好,连接来了后分配一个进程处理连接,虽然提高了连接处理速度,但是没解决本质问题。

TPC

TPC,与 PPC 对应,就是 thread pre connection,即用线程代替进程处理连接的请求。线程间共享内存、通信简单、fork 成本低。

但是 TPC 也有缺点:

  • 创建线程也是有代价的
  • 无需进程通信,但是线程间的互斥和共享引入了新的复杂度,可能导致死锁问题
  • 某个线程一场场,可能导致整个进程退出 因为 tpc 稳定性不如 tpc。

不同并发模式的选择,需要考虑三个指标:响应时间RT,并发数 Concurrency,吞吐量 TPS,吞吐量=并发数/响应时间。