我在线程上有几个线程附加到同一个zmq_context
。
建议关闭的方法是使用zmq_term
来唤醒线程,但会关闭所有套接字。
我在不同的线程上有不同的套接字,并希望共享相同的上下文(以减少zmq线程数)。
有一个recv
阻塞,我希望能够在不影响所有其他套接字的情况下立即关闭它。
zmq
是否可以实现这一点?
答案 0 :(得分:0)
重新设计您的阅读操作,以避免阻止 recv
或添加另一个信号层,以允许其他线程杀死那些因未从常规操作中接收到KeeAliveSIG而挂起的线程。许多选项可以扩展这个相当原始的模型。
ZeroMQ是一个非常好的工具包。
这适用于一个案例,其中[Worker]
个单元不会保持挂起.recv()
如上所述,外部线程只需丢失一些来自{softKeepAliveSIG
的常规[Worker]
更新消息,就可以射击并删除一个已死的(没有响应,也不会读取任何软信号)的进程。 {1}},因此假设它丢失了(...图19中的一个功能,从一本伟大的书“Code Connected,Volume 1”,它本身不能对任何死亡 - [Worker]
)
答案 1 :(得分:0)
如果你想用阻塞recv杀死线程,一种方法是安排其他一些控制器'发送一个' kill'信息。 kill消息只是一条普通的消息,但是它周围的协议将导致接收线程整理和退出。
有很多例子,但是搜索"并行管道与杀戮信号"在当前zmq guide。