I am trying to connect 2 threads together with zeromq inproc.
When I use zmq.Context for 2 threads, latency is about 50-100 microseconds. When switch to zmq.asyncio.Context, latency increses to 300 microseconds.
Is it possible to achieve latency of zmq.Context from zmq.asyncio.Context?
a = []
async def client(context=None):
context = context or zmq.asyncio.Context().instance()
receiver = context.socket(zmq.PAIR)
receiver.connect("inproc://test")
while True:
message = await receiver.recv_string()
print(time.perf_counter_ns() - int(message))
# a.append(time.perf_counter_ns() - int(message))
async def server(context=None):
context = context or zmq.asyncio.Context().instance()
sender = context.socket(zmq.PAIR)
sender.bind("inproc://test")
while True:
await sender.send_string(str(time.perf_counter_ns()))
await asyncio.sleep(1.0)
def main():
context = zmq.asyncio.Context().instance()
context.setsockopt(zmq.IO_THREADS, 2)
t1 = Thread(
target=asyncio.run,
args=(server(context),),
)
t2 = Thread(
target=asyncio.run,
args=(client(context),),
)
t1.start()
t2.start()
t1.join()
t2.join()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print(numpy.mean(a))