查找分布式系统每秒的请求数——教科书查询
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 个核心。
- 一次可以存在多少个线程没有限制。
- 在缓存未命中时,计算机会花费 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 个请求。
在 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 个核心。
- 一次可以存在多少个线程没有限制。
- 在缓存未命中时,计算机会花费 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 个请求。