【问题标题】:How to calculate the number of messages sent in a distributed system?如何计算分布式系统中发送的消息数量?
【发布时间】:2012-02-11 18:21:12
【问题描述】:

假设我们有 n 个进程组成一个通用网络。我们不知道哪些是连接在一起的,但我们知道进程的数量(n)。如果在每一轮,一个进程向它所连接的所有进程发送一条消息,从它们中的每个进程接收 1 条消息,然后程序执行了r轮,有没有办法知道程序执行期间发送了多少条消息?

【问题讨论】:

  • 这是作业吗?如果是这样,你卡在哪里了?
  • 从不否认这是功课..而且我不明白评论的目的。我不只是寻求答案,我寻求解释。在这个问题中,我的意思是它不可能找到发送消息的确切数量,而是我们必须像数字的顺序一样找到它,例如 O(n^2)
  • 有没有办法查看程序执行期间发送了多少条消息? 是的。

标签: networking process distributed rounding


【解决方案1】:

正如您所指出的,如果没有确切的网络结构,就不可能为发送的消息数量设定一个特定值。相反,我们可以查看它的 Big-O 值。

现在要清楚我们所说的 Big-O 是什么意思:

  • Big-O 指的是上限(即最坏的可能情况)复杂度
  • 实际值可能(并且在实际系统中很可能)会更小
  • 如果没有一些描述平均情况的函数(例如,每个进程平均连接到 N / 2 其他进程),我们必须假设最坏的情况
  • 此问题的“最坏情况”是指发送的最大消息数

所以让我们假设最坏的情况,每个进程都连接到N - 1 其他进程。

让我们也定义一些变量:

  • S := 进程集
  • N := S 中的进程数

我们可以将集合S 表示为一个完整的无向图(每个节点都连接到每个其他节点),其中图中的每个节点对应一个进程,图中的每条边对应发送的 2 条消息(1外传和一个回复)。

here,我们看到一个完整图中的边数是(N(N-1))/2

所以在最坏的情况下,发送的消息数量是N(N-1),或者N^2 - N

现在因为我们正在处理 Big-O 表示法,所以我们对这个值如何作为 N 的函数增长感兴趣。

通过三角不等式,我们可以看出O(N^2 - N)O(N^2)的一个元素。

因此,在最坏的情况下,发送的消息数量会增长为N^2


也可以使用邻接矩阵得出此结果,即N x N 矩阵,其中(i, j)th 元素中的1 指的是从节点i 到节点j 的边.

因为在原始问题中,每个进程都向所有连接的进程发送一条消息,这些进程用一条消息进行响应,我们可以看到对于每一对 (i, j)(j, i) 都会有一条边(一个代表传出消息,一个回复)。例外情况是i = j 的对,即。我们一个进程不会向自己发送消息。 所以除了对角线之外,矩阵将完全被1s 填充。

0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0

上图:N = 4 的邻接矩阵

所以我们首先要确定一个公式,将发送的消息总数作为节点数的函数。

通过矩形的面积,我们可以看到矩阵中1s 的数量(忽略对角线)将是N x N = N^2。 现在我们必须考虑对角线。可以存在的对 (x, x) 的数量由函数 f(i) where Z(N) -> Z(N) x Z(N) : f(i) = (i, i) 给出——这意味着该函数将有恰好 N 个不同的解。

所以总体结果是当考虑对角线时我们有N^2 - N 消息。

现在,我们使用与上面相同的 Big-O 推理得出相同的结论,消息数量在最坏的情况下增长为 O(N^2)


所以,现在您只需要考虑已经发生的轮数,剩下 O(RN^2)。

当然现在你必须考虑你是否真的有最坏的情况......

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多