Performance ZMQ客户端-服务器-工作程序性能

Performance ZMQ客户端-服务器-工作程序性能,performance,zeromq,inproc,Performance,Zeromq,Inproc,我目前正在开发一个带有服务器的系统,它获取一些客户机的任务并处理它们 由于需要高吞吐量,我检查了1Gbit网络中的往返速度 场景: 客户端有一个经销商套接字并向服务器发送任务,服务器通过路由器套接字接收任务(TCP连接) 服务器将任务转发给一个工作线程(经销商-经销商通过INPROC) 工作线程处理任务并以相同的方式发送响应 我使用16台机器上的16个客户端作为基准 基准测试1:(没有工作程序,服务器直接将消息发送回客户端) 结果: 1B消息:143540,67 RT/s(RT=往返) 1

我目前正在开发一个带有服务器的系统,它获取一些客户机的任务并处理它们

由于需要高吞吐量,我检查了1Gbit网络中的往返速度

场景:

  • 客户端有一个经销商套接字并向服务器发送任务,服务器通过路由器套接字接收任务(TCP连接)
  • 服务器将任务转发给一个工作线程(经销商-经销商通过INPROC)
  • 工作线程处理任务并以相同的方式发送响应
我使用16台机器上的16个客户端作为基准

基准测试1:(没有工作程序,服务器直接将消息发送回客户端) 结果:

  • 1B消息:143540,67 RT/s(RT=往返)
  • 10B消息:140160,72 RT/s
  • 100B消息:129634,43 RT/s
  • 500B消息:120977,5 RT/s
  • 1024B消息:107983,59 RT/s
基准测试2:(有10个worker,服务器只充当代理)

  • 1B消息:92873,51 RT/s(RT=往返)
  • 10B消息:81619,33 RT/s
  • 100B消息:83606,02 RT/s
  • 500B消息:75229,45 RT/s
  • 1024B消息:63648,32 RT/s
来源:

  • (基准1)
  • (基准2)

有人能帮我确定为什么只添加一个带有工作线程的inproc往返,TP会下降那么多吗?我真的期望工作线程具有更高的TP。ZMQ-Inproc性能不是很快吗?

您没有为ZMQ\u路由器/ZMQ\u经销商插座使用正确的模式

伪代码是

front = zmq_socket (context, ZMQ_ROUTER);
zmq_bind(front, "tcp://*:15555");
back = zmq_socket(context, ZMQ_DEALER);
zmq_bind (back, "inproc://abc");
// Here create thread
zmq_proxy(front, back, NULL); // zmq_proxy will not return
线程的伪代码是

socket = zmq_socket(context, ZMQ_REP);
zmq_connect(socket, "inproc://abc");
do {
   zmq_recv(...)
   zmq_send(...)
} while (1);
客户端的伪代码是

socket = zmq_socket(context, ZMQ_REQ);
zmq_connect(socket, "tcp://127.0.0.1:15555");
do {
   zmq_send(...)
   zmq_recv(...)
} while (1);