答案 0 :(得分:2)
<强>单线程:强>
我们想要计算出系统可以支持的每秒许多请求。这表示为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个请求。