【发布时间】:2017-11-29 11:34:05
【问题描述】:
【问题讨论】:
标签: multithreading resources distributed-computing distributed-system
【问题讨论】:
标签: multithreading resources distributed-computing distributed-system
单线程:
我们想计算出系统每秒可以支持的请求数。这在下面表示为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 个请求。
多线程:
除了上下文切换成本之外,该问题没有提供有关多线程状态的太多细节。这个问题的答案取决于几个因素:
我将做出以下假设:
我现在可以求解 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 个请求。
【讨论】: