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

时间:2017-11-29 11:34:05

标签: multithreading resources distributed-computing distributed-system

在Pradeep K Sinha的书中找到了一个问题

enter image description here

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

1 个答案:

答案 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个请求。

<强>多线程:

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

  1. 计算机有多少个核心?
  2. 一次可以存在多少个线程?
  3. 当存在缓存未命中时,计算机花费多少时间处理请求以及计算机花费多长时间睡觉?
  4. 我将做出以下假设:

    1. 有1个核心。
    2. 一次可以存在多少个线程无关紧要。
    3. 在缓存未命中时,计算机花费20毫秒来处理请求(例如检查缓存,联系文件服务器,并将响应转发给客户端)和80毫秒休眠。
    4. 我现在可以解决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个请求。