簡體   English   中英

ZeroMQ Poller vs Tornados EventLoop

[英]ZeroMQ Poller vs Tornados EventLoop

設計明智和性能明智哪種方法建議用於處理多個Zeromq插座,為什么?

ZeroMQ使用的Tornado的IOLoop是否真的比使用while循環中的Poller處理多個套接字的CPU少?

如果你將自己的觀察/分析添加到你的問題中會很好。

我認為性能沒有任何差異,但設計上存在差異。

如果是poller

您注冊要輪詢的套接字,然后使用if blocks來識別和使用每個套接字。

while should_continue:
        socks = dict(poller.poll())
        if socket_pull in socks and socks[socket_pull] == zmq.POLLIN:
            Work_on_socket_pull ....

        if socket_sub in socks and socks[socket_sub] == zmq.POLLIN:
             Work_on_socket_sub ....

在eventloop的情況下,當您處理多個套接字時,使用事件循環非常優雅,因為您register callbacks

stream_pull = zmqstream.ZMQStream(socket_pull)
stream_pull.on_recv(getcommand)

stream_sub = zmqstream.ZMQStream(socket_sub)
stream_sub.on_recv(process_message)

從第二個示例中可以看出,if塊被刪除了。 您可以在其他地方編寫套接字消息傳遞操作,並在套接字准備就緒時注冊回調方法。 In this case on_recv()

我希望這能澄清你的問題。

由PyZMQ重新實現的Tornado IO Loop無論如何都在幕后使用輪詢器,因此不太可能使用比另一個更多的CPU。

有關詳細信息,請參閱https://github.com/zeromq/pyzmq/blob/master/zmq/eventloop/ioloop.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM