在分布式系统中发送的消息

时间:2012-01-16 21:08:31

标签: networking process distributed rounding

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

1 个答案:

答案 0 :(得分:1)

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

现在只是要明确我们对Big-O的意思:

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

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

我们还要定义一些变量:

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

我们可以将集合S表示为完整的(每个节点连接到每个其他节点),无向图,其中图中的每个节点对应一个进程,图中的每个边对应于发送的2个消息(1个传出传输和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矩阵,其中1元素中的(i, j)引用节点{{ 1}}到节点i

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

1

上方:N = 4 的邻接矩阵。

因此,我们首先要确定发送的消息总数的公式,作为节点数的函数。

通过矩形区域,我们可以看到矩阵中0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 的数量(忽略对角线)将是1。 现在我们必须考虑对角线。函数N x N = N^2给出了可以存在的对(x, x)的数量 - 这意味着该函数将有完全N个不同的解。

因此,总体结果是,当考虑对角线时,我们会收到f(i) where Z(N) -> Z(N) x Z(N) : f(i) = (i, i)条消息。

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


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

当然,现在你必须考虑你是否确实遇到了最糟糕的情况......