【问题标题】:Finding requests per second for distributed system - a textbook query分布式系统每秒查找请求数——教科书式查询
【发布时间】:2017-11-29 11:34:05
【问题描述】:

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

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

【问题讨论】:

    标签: multithreading resources distributed-computing distributed-system


    【解决方案1】:

    单线程:

    我们想计算出系统每秒可以支持的请求数。这在下面表示为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 个请求。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2010-09-16
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      相关资源
      最近更新 更多