C++ マスター/ワーカー
-
21-08-2019 - |
質問
クロスプラットフォームの C++ マスター/ワーカー ライブラリまたはワーク キュー ライブラリを探しています。一般的な考え方は、アプリケーションが何らかの Task オブジェクトまたは Work オブジェクトを作成し、それらをワーク マスターまたはワーク キューに渡し、次に別のスレッドまたはプロセスで作業を実行するというものです。コンテキストを少し説明すると、アプリケーションは CD リッパーであり、並列化したいタスクは「トラックのリッピング」、「WAV を Mp3 にエンコード」などです。
私の基本的な要件は次のとおりです。
- 構成可能な同時タスクの数をサポートする必要があります。
- 依存するすべてのタスクが完了するまでタスクが実行されないように、タスク間の依存関係をサポートする必要があります。
- タスクのキャンセルを許可する必要があります (または、少なくとも自分のタスクにキャンセルをコーディングすることを妨げないようにする必要があります)。
- ステータスと進行状況の情報をメイン アプリケーション スレッドに報告できるようにする必要があります。
- Windows、Mac OS X、Linux で動作する必要があります
- オープンソースである必要があります。
このライブラリが次のような機能を備えていると特に素晴らしいでしょう。
- Qt のシグナル/スロット メカニズムと統合されています。
- スレッドの使用をサポートしました または タスクを実行するためのプロセス。
類推として、私は Java の ExecutorService または他の同様のスレッド プーリング ライブラリに似たものを探していますが、クロスプラットフォーム C++ のものです。誰かそのような獣について知っていますか?
ありがとう!
解決
私はこれはかなり何をしたいんインテルのスレッディング・ビルディング・ブロックの、のために呼び出すと思います。
他のヒント
まだあまり長く使用していないので、あなたのニーズを正確に満たしているかどうかはわかりませんが、チェックしてください。 適応型通信環境 (ACE). 。このライブラリを使用すると、ワーク キューを持ち、その本体を独自のスレッドで実行する「アクティブ オブジェクト」と、オブジェクト間で共有できるスレッド プールを構築できます。その後、キュー作業オブジェクトをアクティブなオブジェクトに渡して処理できるようにします。オブジェクトはさまざまな方法でチェーンできます。このライブラリはかなり重く、学ぶべきことがたくさんありますが、それについて書かれた本が数冊あり、オンラインでもかなりの量のチュートリアル情報が入手可能です。それはあなたが望むすべてに加えてそれ以上のことができるはずです。私の唯一の懸念は、あなたが探しているインターフェイスを「すぐに」備えているかどうか、それともあなたが探しているものを正確に得るためにその上に構築する必要があるかどうかです。のために。
チェックIntelのビルディング・ブロックのライブラリを通します。
が鳴ります。
がありそこにいくつかの優れたオープンソースのものがありますが、私は知らない
彼らが内蔵されている場合はQTスロットをサポートます。
-
これはおそらく、あなたが言及する価値がまだ必要がありますが、何のための巨大な過剰です BOINC のようなタスクのための分散フレームワークです。実行するタスクを与え、メインサーバとその入札を行う労働者の雲があります。これは、SETI @ホームと他の多くのようなプロジェクトの背後にあるフレームワークです。
C ++でブーストライブラリを使用してスレッドを作成するために、この記事を参照してください。
(それはタイトルをc言うにもかかわらず、C ++のスレッドがあります)
基本的には、「実行可能」オブジェクトを取り、新しいスレッドで実行して、それを開始し、独自の「マスター」オブジェクトを作成します。
そして、あなたが望む任意の古い時間を「実行可能」を実装して、マスター・ランナーにそれらをオーバースロー新しいクラスを作成することができます。