【发布时间】:2011-04-23 18:51:20
【问题描述】:
上下文:Linux (Ubuntu)、C
我在一个盒子上生成了几个相同的简约进程。这些流程正在建立一些网络,并且大部分时间都停留在poll(或select 或其他任何东西——我可以根据需要进行更改)。
进程生命周期由runit 和multiwatch 监控(如果这改变了某些东西)。
有时,一个随机进程可能会决定它想向所有其他进程(如果它使事情变得更简单,包括它自己)发送一条消息(即一堆数据)。
此外,有时,人类操作员可能希望从命令行发送这样的消息(假设我可以根据需要编写命令行工具)——同样,发送到每个进程。
必须保证消息传递。但是,如果任何(或所有)收件人突然消失,它不应该阻止发件人(OTOH,如果他们还活着但很忙,他们最终必须收到消息。)如果收件人进程在轮询中空闲,它必须被消息唤醒。
在不增加很多复杂性的情况下,组织这种交流的最稳健的方式是什么?
注意:由于技术原因,我不能使用 POSIX 信号在进程之间进行通信。
【问题讨论】: