查找分布式系统每秒的请求数——教科书查询

Finding requests per second for distributed system - a textbook query

在 Pradeep K Sinha 的书中发现了一个问题

根据我的理解,可以安全地假设有多少线程可用。但是我们如何计算时间呢?

单线程:

我们想计算出系统每秒可以支持的请求数。这在下面表示为 n

1 second = 1000 milliseconds = 0.7n(20) + 0.3n(100)

由于 70% 的请求命中缓存,我们用 0.7n(20) 表示处理命中缓存的请求所花费的时间。我们用 0.3n(100) 表示错过缓存的请求。由于线程在缓存未命中时进入休眠状态并联系文件服务器,因此我们无需担心将下一个请求的处理与当前请求交错处理。

求解 n:

1000 = 0.7n(20) + 0.3n(100) = 0.7n(20) + 1.5n(20) = 2.2n(20) = 44n => n = 100/44 = 22.73.

因此,单个线程每秒可以处理22.73个请求。

多线程:

除了上下文切换成本之外,问题没有提供有关多线程状态的太多细节。这个问题的答案取决于几个因素:

  1. 电脑有多少核?
  2. 一次可以存在多少个线程?
  3. 当存在缓存未命中时,计算机花费多少时间来处理请求以及计算机花费多少时间休眠?

我将做出以下假设:

  1. 有 1 个核心。
  2. 一次可以存在多少个线程没有限制。
  3. 在缓存未命中时,计算机会花费 20 毫秒为请求提供服务(例如,检查缓存、联系文件服务器以及将响应转发给客户端),并花费 80 毫秒休眠。

我现在可以求解 n:

1000 milliseconds = 0.7n(20) + 0.3n(20).

在高速缓存未命中时,线程会花费 20 毫秒的时间进行工作,并花费 80 毫秒的时间休眠。当线程休眠时,另一个线程可以 运行 并做有用的工作。因此,在缓存未命中时,线程仅使用 CPU 20 毫秒,而当进程是单线程时,下一个请求被阻止处理 100 毫秒。

求解 n:

1000 milliseconds = 0.7n(20) + 0.3n(20) = 1.0n(20) = 20n => n = 1000/20 = 50.

因此,根据上述假设,多线程进程每秒可以处理 50 个请求。