7

...マルチスレッドネットワークサーバーで使用します。

複数のスレッド間でデータをやり取りしたい。現在、マスター スレッドが select() でブロックし、ワーカーが recv() でブロックしているソケットを使用していますが、C++ でこのタスクを処理するためのより高度な、または事前にパッケージ化された方法があると思います。

4

5 に答える 5

4

plan9portのlibthreadには、非常によく似た Channel 構造体が含まれています。plan9port と go-lang の両方への Russ Cox の貢献、およびlibthread historyに注意してください。

別の方向に進み、Luca Cardelli と Rob Pike は、CSP のアイデアを、ユーザー インターフェイス コードを生成するための Squeak ミニ言語 [4] に発展させました。(この Squeak は Squeak Smalltalk の実装とは異なります。) Pike は後に Squeak を本格的なプログラミング言語 Newsqueak [5][6] に拡張し、Plan 9 の Alef [7] [8]、Inferno の Limbo [9]、Google の Limbo を生み出しました。 [13]に行きます。

Plan 9 の歴史の後半で、2 つの言語のインフラストラクチャを維持するのは非常に手間がかかるようになったため、Alef は廃止され、CSP 構造は libthread の形式で C に移植されました。

したがって、go チャネルは基本的に libthread の直系の子孫なので、これ以上似たものは見つからないと思います:)

于 2013-02-01T03:48:50.627 に答える
4

スレッド プールでワーカー スレッドを待機させます。

次に、選択を待機するマスター (読み取りと書き込みの両方)。

データが来ると、マスターはジョブをスレッド プールに追加します。各ジョブが追加されると、スレッドが起動してジョブを実行し、プールに戻ります。この方法では、recv() を使用して特定のポートで待機しているスレッドをブロックせず、子スレッドの固定セットがすべての着信トラフィックを処理できます。

既製のオブジェクトでこの機能をサポートする現在のライブラリ:

于 2010-02-03T08:22:07.720 に答える
2

スレッド間通信に特に適したパイプとメッセージ キューを備えた ACE ライブラリを試すことができます。

**ACE は Adaptive Communication Environment の略です*

于 2010-02-03T08:13:59.360 に答える