---
title: 多服务台与资源池化
url: https://doc.liz6.com/theory/03-queueing-theory/06-multiple-servers
locale: zh
area: theory
tags:
- 排队论
- 基础理论
date: 2026-09-10
modified: 2026-09-10
description: 两台服务台接收同样总流量，共享一条等待队列通常比随机各排一队更能利用空闲资源。池化减少“这边排队、那边空闲”的机会；它不会把两个 10 ms 的服务台变成一个 5 ms 的服务台。
---

# 多服务台与资源池化

两台服务台接收同样总流量，共享一条等待队列通常比随机各排一队更能利用空闲资源。池化减少“这边排队、那边空闲”的机会；它不会把两个 10 ms 的服务台变成一个 5 ms 的服务台。

## M/M/c 的状态依赖能力

假设总到达为 Poisson、每台独立指数服务且速率为 $\mu$，一个 FCFS 公共队列，无放弃、无容量上限。系统内有 $n$ 个请求时，总完成速率为 $\min(n,c)\mu$。

记提供负荷 $a=\lambda/\mu$，每台利用率 $\rho=a/c$。稳态要求 $\rho<1$。由相邻状态平衡得到：

$$\pi_0=\left[\sum_{n=0}^{c-1}\frac{a^n}{n!}+\frac{a^c}{c!(1-\rho)}\right]^{-1}.$$

到达者必须等待的概率是系统内至少有 $c$ 个请求，即 Erlang C：

$$C(c,a)=\frac{a^c}{c!(1-\rho)}\pi_0,\qquad
E[W_q]=\frac{C(c,a)}{c\mu-\lambda},\qquad E[T]=E[W_q]+\frac1\mu.$$

等待尾部为 $P(W_q>t)=C(c,a)e^{-(c\mu-\lambda)t}$。总时间还要加上自身服务，通常不能直接把 $c\mu-\lambda$ 当作总时间的指数参数。

## 相同资源下比较池化与拆分

两台各 $\mu=100$/s、总 $\lambda=160$/s，则 $a=1.6,\rho=0.8$，$\pi_0=1/9$，$C=32/45\approx0.7111$，池化平均等待约 17.78 ms、系统时间 27.78 ms。

若每个到达独立等概率随机选择一台，Poisson 分流得到两个到达率 80/s 的 M/M/1，每个平均等待 40 ms、系统时间 50 ms。总硬件相同，等待差异来自闲忙协调。

**多服务台与资源池化 · 实验**

每台μ=100/s、指数服务，总到达λ=cμρ。共享FCFS队列与独立均匀随机拆分比较；改变c会同步改变总到达率。保留相同每台利用率和总能力，不含锁竞争。


先保持两台、改变 $\rho$，再改变台数。实验在改变 $c$ 时同时按 $\lambda=c\mu\rho$ 改变总负载，研究的是相同每台利用率下的规模效应；它不是固定外部流量的扩容实验。$c=1$ 时两条曲线重合，可作为边界核对。

## 池化有工程条件

共同队列必须能及时派工，服务台应可互换，任务不能因数据局部性或资源型号而任意失配。共享队列的锁争用、跨机通信和缓存失效不在 M/M/c 中。随机拆分只是比较基准，最短队列、最少连接、工作窃取并不等价于随机路由。

无等待区的电话线路模型使用 Erlang B；忙时直接丢失，与 Erlang C 的“忙时继续等”不同。用户会放弃时可研究 Erlang A；服务时长一般分布则需 M/G/c 的近似或仿真。不要把不同模型名称视为公式的可互换别名。

## 自检

1. 为什么不能把两台 $\mu=100$/s 的服务台直接代入单台 $\mu=200$/s？

<details><summary>参考思路</summary>

单个请求在两台系统中仍需平均 10 ms，且空系统来一个请求时仅一台服务。单台 200/s 则每个请求平均只需 5 ms；状态为 1 时的完成率就已经不同，因而整个时延分布也不同。

</details>

2. 有 8 个工作线程，数据库却只允许 2 个并行操作，M/M/8 是否合理？

<details><summary>参考思路</summary>

只有线程是可独立提供相同服务的真实瓶颈资源时才合理。若主要时间在争用两个数据库槽位，应单独建立这个两台资源模型，或建立含线程与数据库的网络，再测量交互影响。

</details>

## 延伸

[NPTEL 多服务台讲义](https://archive.nptel.ac.in/content/storage2/courses/117103017/module3/lec2/1.html)以状态相关完成率推导 Erlang C。其 offered load 记号与本文不同；本文始终用 $a=\lambda/\mu$、$\rho=a/c$。
