2010-12-15 4 views
19

私は現在、完全にシングルスレッドである中規模のC++コードベースで作業しています。しかし、パフォーマンスの向上のために並行性と並列性を追求する時が来ています。 GoogleのGoプログラミング言語の並行性モデルに非常に興味があります。非常に軽量なgoroutinesとチャネルの通信システムがあります。GoゴルーチンまたはGoチャネルを実装するC++ライブラリ?

幸いにも、さまざまな理由から、プロジェクトはC++にとどまる必要があります。だから私の質問です:平行性のためのGoパラダイムに近似するC++ライブラリがありますか?具体的には、C++で利用可能なgoroutinesまたはgoチャネルの近似はありますか?私のfallbackプランはboost :: threadを使うだけです。

問題のアプリケーションは、財務予測ドメインの長期実行の独自のシミュレーションです。通常はCPUにバインドされていますが、新しいデータが利用可能になるとIOでブロックされます。関連する計算の多くは以前の結果に依存せず、並行して実行することもかなり容易にできます。分散したコンテキストでアプリケーションを実行できることは長期的な目標ですが、直ちに解決する必要はありません。

+1

類似した質問:http://stackoverflow.com/questions/2190231/looking-for-ac-or-c-library-providing-a-functionality-similar-to-google-gos-c – JimR

+0

どのように似ていますか? –

+0

あなたは本当にあなたのプロジェクトについてもっと具体的にする必要があります。さまざまなタイプのアプリケーションが、異なるスレッドモデルに役立つ(またはそうでない)コルーチン(それは基本的にゴルーチンである)またはスレッドです。おそらくイベントモデルがより適しているか、または様々なアクターライブラリの1つです。 **あなたのアプリケーションを記述する**。 – jer

答えて

4

インテルのTBB(スレッディングビルディングブロック)は、自分の下位バージョンをboost::threadからローリングするよりも優れています。

+1

TBB良い選択肢のように見えますが、無料で使用できる同等のライブラリがないと確信した場合にのみ選択します。 –

+0

TBB *は無料です。リンクされたサイトのApache Public Licenseの下で配布されているバージョンがあります。 –

3

This question一般的に「C++コルーチン」をGoogle検索すると、近いものが得られるはずです。 SOの質問は、Boost :: coroutineを試みることを示唆しています。

Cをラッピングしても構わない場合は、libtaskを試すことができます。 Goの仕事が始まる前にRuss Cox(公式Goデベロッパーチームの一人)が書いたもの。私はC言語でしか使用していないので、該当するかどうかわかりません。

Goチャネルは、途中でロックキューとして実装されるため、通常のスレッドを使用して同様のメカニズムを組み込むことができます。

+0

libtaskが移動したように見えます。フォークはhttps://github.com/jamwt/libtaskのGitHubにあります。 –

+0

@RichardChambers https://swtch.com/libtask/に移動したようですが、投稿を更新しました – cthom06

2

お試しGBL library、コルーチン(ファイバー)、スレッド、同期、および非同期ハンドラ - すべてが最新のC++です。

1

私がこれまで見たことから、cilkは、並行処理のスタイルと非常によく似ているようです。インテルはこれを買って、Intel Cilk Plusの商用サポートを提供しているようだ。

関連する問題