FIFO(命名管道)消息传递障碍

Ivo*_*lka 2 python unix linux pipe named-pipes

我计划使用Unix命名管道(mkfifo)进行简单的多进程消息传递.消息只是一行文本.

你会劝阻我吗?我应该期待什么障碍?

我注意到了这些限制:

  1. 在收到消息之前,发件人无法继续.
  2. 接收器被阻塞,直到有一些数据.当我们需要停止读取时,将需要非阻塞IO.例如,另一个线程可能会要求这样做.
  3. 接收器可以在单次读取中获得许多消息.这些必须在退出前进行处理.
  4. 原子消息的最大长度限制为4096字节.这是Linux上的PIPE_BUF限制(参见man 7 pipe).

我将在Python中实现消息传递.但总体上存在障碍.

Tod*_*ner 5

  1. 缺乏可移植性 - 它们主要是Unix的东西.套接字更便于携带.
  2. 更难扩展到多个系统(另一个插座+)
  3. 另一方面,我认为管道比同一台机器上的进程的套接字更快(通信开销更少).

至于你的局限,

  1. 您可以在管道上" 选择 ",进行非阻塞读取.
  2. 我通常(在perl中)在"\n"分隔的管道上打印出我的消息,并从中读取一行以一次获得一条消息.
  3. 小心原子长度.

我发现perlipc是各种选项之间的一个很好的讨论,尽管它有perl特定的代码.