我有一个屏障实现,使用PAIR/PAIR
互连。
服务器端将向客户端发送JSON消息,然后等待客户端发送消息。我将在一项测试中发送40000条消息,并重复10次以计算平均使用时间。
pair_Server.py
:
import zmq
import random
import sys
import time
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.bind("tcp://*:5556")
totalTime = 0
for testCount in range(10):
isFirstSend = True
startTime = 0
for num in range(40000):
socket.send_json({ 'num' : num })
if isFirstSend:
isFirstSend = False
startTime = time.time()
msg = socket.recv_json()
totalTime += (time.time() - startTime)
print("Finish test {}".format(testCount))
print(totalTime / 10)
pair_Client.py
:
import zmq
import random
import sys
import time
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.connect("tcp://localhost:5556")
while True:
msg = socket.recv_json()
socket.send_json(msg)
输出时间花费约为4.3秒。然后,我删除障碍。现在,服务器将仅向客户端发送JSON消息,而无需等待回复。 10轮后。平均花费的时间为0.3秒。
我知道速度会变快,但差异如此之大,我想问一下我是否使用了错误的实现。我已经尝试过PUSH/PULL
套接字进行类似的实现,并且得到了类似的结果。
如果从未使用过ZeroMQ,在这里您可以先看看"ZeroMQ Principles in less than Five Seconds",然后再深入研究更多细节]]
-它只会向前移动一步。Q
:“ 一种好方法实现具有ZeroMQ的障碍吗?”最好的方法是不执行这样的操作-在性能和延迟方面。
原来的代码没有实现障碍,它会强制本地进程停止并等待远程分布式进程接收(如果可能),进程(如果可能)并响应至少一个答案(至少一个零长度的消息是可以的)-before
这是很疯狂的,基本上是不安全的假设,对吗?
我永远不会接受代码(不仅是针对生产级软件的代码),它会故意接受自身以使这种自我监禁变成几乎无法挽救的mamooth-trap
(自己已经失去了对代码执行的控制,运行它的整个设备……产生了无用的牺牲品……取决于不确定的外部因素,这些因素完全超出了您的控制范围-可能,但是有点-方便-记住阿波罗11号在月球上着陆了……等待Aha的糟糕又丑陋的片刻,是不是?)您的“ barrier”-更少的代码只是测量循环,以抛出一批按钮按下(无需等待,每个此类按钮按下实际上开始执行的操作-是自动加农炮按钮,还是卫星遥感相机按钮,使卫星实际上位于Ryugu小行星表面上方几米处,相距几十光分钟,您才能听到您的第一个按钮-“推” ...
因此,实际的[[distributed
-((behavioural)-protocol决定什么可能成为可行的解决方案,而什么则不可行。