2

単純なマルチプロセス メッセージングに Unix 名前付きパイプ (mkfifo) を使用する予定です。メッセージは 1 行のテキストです。

それを思いとどまらせてくれませんか?どのような障害が予想されますか?

私はこれらの制限に気付きました:

  1. メッセージが受信されるまで、送信者は続行できません。
  2. 受信者は、データが存在するまでブロックされます。読み取りを停止する必要がある場合は、ノンブロッキング IO が必要になります。たとえば、別のスレッドがそれを要求する可能性があります。
  3. 受信者は、1 回の読み取りで多くのメッセージを取得できます。これらは、終了する前に処理する必要があります。
  4. アトミック メッセージの最大長は 4096 バイトに制限されています。これは、Linux の PIPE_BUF 制限です (man 7 パイプを参照)。

メッセージングを Python で実装します。しかし、障害は一般的に保持されます。

4

2 に答える 2

5
  1. 移植性の欠如 - それらは主に Unix のものです。ソケットはより移植性があります。
  2. 複数のシステムへのスケールアウトが困難 (別のソケット +)
  3. 一方、同じマシン上のプロセスの場合、パイプはソケットよりも高速であると思います(通信オーバーヘッドが少ない)。

あなたの限界については、

  1. 非ブロッキング読み取りを行うために、パイプで「選択」できます。
  2. 私は通常 (perl では) "\n" で区切られたパイプにメッセージを出力し、それらから 1 行を読み取って一度に 1 つのメッセージを取得します。
  3. 原子の長さに注意してください。

perlipcは、perl 固有のコードを持っていますが、さまざまなオプション間の良い議論だと思います。

于 2009-05-29T17:53:36.173 に答える