我计划使用 Unix 命名管道 (mkfifo) 进行简单的多进程消息传递。 一条消息只是一行文本。
你会阻止我这样做吗?我应该遇到什么障碍?
我注意到这些限制:
- 在收到消息之前,发件人无法继续。
- 接收器被阻塞,直到有一些数据。需要非阻塞 IO 当我们需要停止阅读时。例如,另一个线程可能会要求这样做。
- 接收方可以在一次读取中获得许多消息。这些都要处理 退出前。
- 原子消息的最大长度限制为 4096 字节。这是 Linux 上的 PIPE_BUF 限制(参见 man 7 pipe)。
我将用 Python 实现消息传递。但总体而言,障碍依然存在。
最佳答案
- 缺乏可移植性——它们主要是 Unix 的东西。套接字更便携。
- 更难扩展到多个系统(另一个套接字+)
- 另一方面,对于同一台机器上的进程,我认为管道比套接字更快(通信开销更少)。
至于你的局限性,
- 您可以在管道上使用“select”来进行非阻塞读取。
- 我通常(在 perl 中)在用“\n”分隔的管道上打印我的消息,并从中读取一行以一次获取一条消息。
- 请注意原子长度。
我找到了 perlipc成为各种选项之间的一个很好的讨论,尽管它有 perl 特定的代码。
关于python - FIFO(命名管道)消息传递障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927233/