私は頭をつぶしていますが、これに対する解決策が見つかりません。次のシナリオを検討してください。
ローカルネットワーク上の別のマシンへの非ブロッキング「キュー」に書き込みたいライターがあり、データを読み取り(ライターがない場合はブロッキングモード)、ジョブAを実行してから長い時間後に戻るリーダーがありますそして次のデータを取ります。
したがって、シナリオは次のようになります。
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
読者が読んで仕事をする
リーダーがビジー状態であると同時に:
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
- など...
tcpデーモンをリーダーとしてこれを実行できると思っていましたが、それはフォークと同時に実行されることを意味し、リーダーはCPUを大量に消費するため、一度に1つずつ処理する必要があります。
TCPサーバーにリクエストを取得させてからFIFOに通知し、別のデーモンにFIFOから読み取らせることを考えましたが、同じ制限があります。
つまり、ライターが書き込むときに FIFO を読み取る必要があり、ライターはリーダーよりも何倍も高速に書き込む必要があります。
db ソリューションは問題ありませんが、a) あまり高速ではなく、b) リーダーのロックがありません..sleep(x) を使用して実装したくないため、適切なプログラミング手法ではないようです。
解決策はありますか?