特定のタスクを実行するためにスレッドを生成し、スレッドセーフキューを使用してそれらと通信したいと思います。また、待っている間、さまざまなファイル記述子に対してIOを実行したいと思います。
これを達成するための推奨される方法は何ですか?キューが要素なしから一部の要素に移動したときに、スレッド間パイプを作成して書き込む必要がありますか?もっと良い方法はありませんか?
また、スレッド間パイプを作成する必要がある場合、共有キューを実装するライブラリを増やして、共有キューとスレッド間パイプを単一のエンティティとして作成できないのはなぜですか?
私がこれをやりたいという事実は、根本的な設計上の欠陥を意味しますか?
私はこれをC++とPythonの両方について尋ねています。そして、私はクロスプラットフォームソリューションに少し興味がありますが、主にLinuxに興味があります。
より具体的な例については...
ファイルシステムツリー内のものを検索するコードがいくつかあります。私はいくつかの通信チャネルをソケットを通して外の世界に開いています。ファイルシステムツリー内のものを検索する必要がある(またはない)リクエストが到着します。
1つ以上のスレッドでファイルシステムツリー内のものを検索するコードを分離します。ツリーを検索する必要が生じたリクエストを受け取り、それらをサーチャースレッドによって実行されることのスレッドセーフキューに入れたいと思います。結果は、完了した検索のキューに入れられます。
検索が行われている間、すべての非検索要求に迅速に対応できるようにしたいと思います。タイムリーに検索結果に対応できるようにしたいと思います。
着信要求を処理することは、通常、を使用するある種のイベント駆動型アーキテクチャを意味しますepoll
。ディスク検索要求のキューと結果の戻りキューは、ミューテックスまたはセマフォを使用してスレッドセーフを実装するスレッドセーフキューを意味します。
空のキューで待機する標準的な方法は、条件変数を使用することです。しかし、待っている間に他のリクエストを処理する必要がある場合、それは機能しません。結局、結果キューを常にポーリングし(そして、平均してポーリング間隔の半分だけ結果を遅らせる)、リクエストをブロックし、サービスを提供しません。