如何让网络中的N台计算机同时启动一个活动?

2024-06-10 05:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个分布式应用程序,它要求网络中的所有计算机同时执行一个事件。你知道吗

假设我们有两个长度相等的数组。你知道吗

labels[] = ["label1", "label2", "label3", ...]
duration[] = [0.5, 1.2, 0.1, 0.1, 3.0, ...]

我在一个局域网里有一个主机和N个奴隶。假设数组已经被复制到所有的从机。我现在要做的是,在所有代码上运行以下代码。你知道吗

for i in len(labels):
  print labels[i]
  sleep(duration[i])

我需要这个代码在客户机上完全相同的时间开始。你知道吗

如何在所有客户端同时触发“execute”事件?假设所有客户机都使用相同的NTP服务器进行同步,如果我要求他们在预定义的时间开始,那么准确度是否合理?duration[]数组的时间元素可以小到0.1秒,我想要一个合理的同时性。你知道吗


Tags: 代码程序网络客户机labels计算机时间事件
3条回答

像其他人写的那样,使用Internet NTP服务器可能会导致太大的延迟。你知道吗

我看到两种选择:

  1. 设置本地NTP服务器并将其用作所有客户端的参考。你知道吗
  2. 让您的客户机侦听UDP数据包,并以广播/多播的方式启动这些数据包。然后他们应该或多或少地同时开始。你知道吗

简短的回答-完全同时-是不可能的。正如Russell所写,NTP只在100ms内准确,在局域网上运行可以测量通信延迟,在发送任务时,可以添加超时,即任务应该在何时开始。当您将它发送到N节点并且平均延迟为L毫秒时,第一个节点需要等待(N-1) * L毫秒才能启动,第二个(N-2) * L毫秒。。。等等。最后一个会马上开始。你知道吗


为了了解同步时钟的问题有多复杂,你可以阅读Google在Spanner: Google's Globally-Distributed Database上的研究论文。他们使用原子钟和GPS时钟在一个数据中心内同步纳秒,在数据中心内同步几毫秒。你知道吗

根据http://en.wikipedia.org/wiki/Network_Time_Protocol,“NTP通常可以在公共互联网上保持时间在几十毫秒以内,并且在理想条件下可以在局域网中实现优于一毫秒的精度。不对称路由和网络拥塞可能导致100毫秒或更大的错误。”

因此,使用公共NTP服务器同步到100ms内是可行的,这可能是使其正常工作的最简单途径。你知道吗

由于您在局域网上,您可以通过让主服务器向下级发送网络消息来获得更好的性能,给出当前时间的概念,或者更简单地说,通过在局域网上运行自己的NTP服务器并将集群指向它。你知道吗

相关问题 更多 >