首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nim的异步ZeroMQ

nim的异步ZeroMQ
EN

Stack Overflow用户
提问于 2018-03-06 10:49:21
回答 2查看 321关注 0票数 1

我从未使用过ZeroMQ,一小时前第一次听说它。但从指南(本指南)看,似乎存在异步I/O。

它还碰巧有一个nim端口:这一个

因此,我想知道,异步魔术是否与async/await有关,这些关键字在nim端口(也就是c2nim)中不存在。那么,这仅仅是ZMQ内部的一些东西,而API不需要为此烦恼吗?

我认为异步/等待是一种流行的东西,它必须泡到最上层的主循环(框架循环),所以API必须是异步感知的。

这完全是我的误解吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-06 15:27:46

本机ZeroMQ API支持阻塞和非阻塞I/O-s。

为此,可以在flags,中添加zmq.NOBLOCK,从而实现一种非阻塞的操作模式。

相应的语言包装功能决定了。。。

如果我阅读上面提到的尼姆 ZeroMQ包装器,在我看来,send()recv()函数包装器都有一个硬编码的阻塞版本。

当一个尼姆-based节点遇到另一个节点时,包装器似乎也不支持正确的有线消息大小,后者使用的是ZeroMQ版本2.1.+,这在异构分布式系统领域仍然很有趣和常见。

ZeroMQ还有一个带有timeout参数的poll()方法,这样您的多路复用I/O操作就可以产生在一些软实时控制约束下如何操作多个I/O通道的所有需要的方法。

票数 1
EN

Stack Overflow用户

发布于 2022-01-20 18:36:51

虽然当时接受的答案是正确的,但现在用包装器构建了具有ZMQ的异步,并提供了一些示例:

见:

您还可以绕过阻塞行为或ZMQ,以便不使用轮询/ sleepAsync手动阻止异步分派循环:

代码语言:javascript
复制
let
  zmq_timeout = 50
  async_loop_time = 450 # spend more time on async stuff than on zmq stuff
var
  conn = listen("tcp://127.0.0.1:36000", mode = PAIR=
  poller = initZPoll([conn], ZMQ_POLLIN)

if poller.poll(timeout):
  if events(poller[0]):
    var res = poller[0].receive()
    # Do async stuff
else:
  waitFor sleepAsync(async_loop_time) # Calling sleepAsync is a trick to make the async dispatch loop progress for a time 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49128986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档