問題タブ [message-passing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ゲームのメッセージ パッシング システムのオプション
ハンドヘルド ハードウェア (Pandora) を対象とした C++ の RTS ゲームに取り組んでいます。参考までに、Pandora には ~600Mhz の単一の ARM プロセッサがあり、Linux を実行します。私たちは優れたメッセージ パッシング システム (内部と外部の両方) に落ち着こうとしていますが、これは私にとって新しい領域です。
私たちが伝えたいメッセージの例を挙げると役立つかもしれません。ユニットは、モデルをメモリにロードするために次の呼び出しを行うことがあります。
sendMessage("model-loader", "load-model", my_model.path, model_id );
その見返りに、ユニットは、特定の model_id のモデル オブジェクトを含むある種のメッセージを期待し、それをグラフィックス システムに渡すことができます。この sendMessage 関数は決して最終的なものではないことに注意してください。メッセージパッシングシステムに関する私の現在の理解を反映しているだけで、おそらく正しくありません:)
私が言えることは、かなり異なる 2 つの選択肢があるということです。1 つは、メッセージをメモリに渡し、外部マシンと対話する必要がある場合にのみネットワークを通過することです。オーバーヘッドが少ないように見えるため、このアイデアは気に入っていますが、ここでの大きな問題は、メッセージ キューでミューテックス ロックを多用する必要があるように思われることです。可能であれば、過剰なロックを避けたいと思います。(アトミック操作に依存してint
) ロックせずに単純なキューを実装するいくつかの方法を読みましたが、これらはキューに対して 1 つのリーダーと 1 つのライターしかないことを前提としています。オブジェクトのキューには多くのライターと 1 つのリーダーがあるため、これは特定のケースでは役に立たないようです。
もう 1 つの選択肢は、ネットワーク層を完全に通過することです。これには、非同期メッセージ パッシングをほとんど無料で取得できるなど、いくつかの楽しい利点があります。また、ローカルで渡すのとまったく同じ呼び出しを使用して、メッセージを他のマシンに渡すことができます。ただし、このソリューションは、おそらく私が完全に理解していないため、間違った方法でこすります:)メッセージを送受信するすべてのオブジェクトにソケットが必要ですか? もしそうなら、これは過剰に思えます。特定のゲームには、何千ものオブジェクトがあります。Pandora のようなややパワー不足のデバイスの場合、そのようなネットワークの悪用がボトルネックになるのではないかと心配しています。しかし、私はまだテストを実行していないので、これは単なる憶測です。
MPI はメッセージ パッシングで人気があるようですが、私たちが求めているものにはやり過ぎのように感じます。このコードは、クラスターに触れたり、重い計算を行う必要はありません。
これを達成するためにどのようなオプションがあるかについての洞察をいただければ幸いです。
c# - OOP-C#でのメッセージパッシング
C#のOOPコンセプト「メッセージパッシング」(メソッドの呼び出し/パラメーターの受け渡し/イベントの起動/イベントの処理/ ???)の例は何ですか?なぜメッセージパッシングと呼ばれるのですか?
c# - C#の異なるプロセス間でメッセージを渡すための高速化された方法は何ですか?
MicrosoftAddInFrameworkによってロードされた多数のアドインがすべて別々のプロセスにあります。
パケットは一方の側(アドインでもあります)から着信し、パケットのプロセスを調整するコントローラー(アドインでもあります)に送信されます。次に、コントローラは、最後のアドインから受信したコンテンツと結果に応じて、パケットを他の複数のアドインに1つずつ送信します。
私の質問は、AddIn Frameworkの通信レイヤーがこれを行うための高速な方法になるのか、それとも名前付きパイプやネットTCP、またはまったく異なるものを使用するWCFからより良いパフォーマンスが得られるのかということです。
concurrency - Erlang がソフト リアルタイム アプリケーションに適している理由は何ですか?
いくつかの背景
私は、デジタル メディア プログラミング用のプログラミング言語の構築に取り組んでいます。これは、非共有メッセージ パッシングとソフト リアルタイムを使用して同時実行をサポートする必要があります (つまり、サンプルやフレームを失うことなく、一定のスループットでオーディオ/ビデオを計算するために最善を尽くします)。 .
これらの機能を組み合わせるのは驚くほど難しいことがわかりました。これは主に、リアルタイム コードが動的にメモリを割り当ててはならないという 1 つの特定の制約が原因です。
私の言語は、次のようなものを簡単に実装できるようにする必要があります。
- 1 つのスレッドは、パラメーターに基づいてオーディオ サンプルを計算します。これらは、たとえば、シンセサイザーのさまざまなコントロールの値である可能性があります。このスレッドは「リアルタイム」で実行されます。
- 1 つのスレッドが、ユーザーまたは別のコンピューターから入力を受け取り、これらの値を変更します。これは、たとえば、ユーザーがマウスでノブを回したことに反応する GUI スレッドである可能性があります。
ユーザーが設定した新しい値を、キューを介してシンセサイザー エンジンに送信したいと考えています。フロートやその他の原子値のみを送信したい場合、問題は面白くありません。実際には、複雑なオブジェクトやデータ構造であっても、あらゆる種類のデータをあるスレッドから別のスレッドに流すことができるようにしたいと考えています。これは、スレッドと優先順位のあらゆる構成で可能になるはずです。リアルタイム側での動的メモリ割り当てがなければ、プログラマーに恣意的な制限のように見えるものを課すことなく、これは非常に困難になります。
Erlang は、リアルタイム システムに適していると宣伝されることがよくあります。私の理解では、Erlang は決してメモリ割り当てを禁止しません。私が同じことをしたら、それらの割り当てを実行するコードに非決定論的なタイミングが導入されるという犠牲を払って、多くの問題が解消されます。
質問
では、Erlang がこれほど適している理由は何でしょうか? メモリ割り当てによって引き起こされる問題を回避するための特別なトリックを実装していますか、それとも問題を完全に無視していますか? リアルタイムへの別のアプローチはありますか?
質問を説明する例
Erlang で 50 ミリ秒ごとに 64 のサンプルを生成する必要があるシンセサイザーを作成していると仮定しましょう。また、文字列上でスライダーを動かしたときに、小さなオブジェクト (パラメーターの名前と新しい値を含むリストまたはタプルとしましょう) を GUI プロセスからオーディオ プロセスに送信する必要があるとします。コピーが作成されます。これには、動的メモリ割り当てが必要です。この割り当てが音声計算を遅らせないようにするために、Erlang はどのように役立ちますか?
java - メッセージング (JMS など) がマルチスレッドの代わりになるのはいつですか?
私は、メッセージ駆動型 Bean (MDB) の複数のインスタンスがリッスンするメッセージ キューに複数の作業単位を配置することによって同時実行性を実現するデータ処理アプリケーションに取り組んでいます。この方法で並行性を実現する以外に、メッセージング インフラストラクチャと MDB を使用する特定の理由はありません。
これにより、複数のスレッドを使用して同じことが達成できなかった理由を考えるようになりました。
私の質問は、どのような状況で非同期メッセージング (JMS など) を同時実行を実現する手段としてマルチスレッドの代わりに使用できるかということです。あるアプローチを別のアプローチよりも使用する利点/欠点は何ですか。
.net - OpenCV マルチスレッド スレッド メッセージ
.Net 3.5 とOpenCV 1.1を使用してプログラムを作成しています。コンピューターの Web カメラから画像変数を取得する必要がある複数のスレッドがあります。複数のスレッドが同時にカメラにアクセスしようとすると、メモリ違反エラーが発生するという問題があります。PostThreadMessage と GetMessage を使用して変数をスレッドに送信できることはわかっています。PostThreadMessage
andを使用して実行中にスレッドに変数を渡す方法のチュートリアルまたは例を教えてもらえますGetMessage
か?
両方のワーカー スレッドがカメラから画像を取得する関数を呼び出そうとすると、発生するエラーはメモリ アクセス違反エラーです。1 つのスレッドで他のすべての画像を取得することで、これを回避したいと考えています。それぞれに、カメラがキャプチャした画像を格納する1 つのIplImage変数があります。お役に立てれば。
c# - cmd行を介してメッセージを渡すシングルインスタンスアプリ?
コマンドラインから起動するC#アプリがあります。通常、データはadd()などのコマンドラインを介して渡されますapp -a string
。アプリのインスタンスを1つだけ開いて、コマンドラインから文字列を追加する場合は、1つのインスタンスにそれを認識させて更新してもらいたいです。データをデータベースに適切に配置して実行中のインスタンスにメッセージを送信するか、メッセージを実行中にデータを実行中のインスタンスに渡してデータベースに配置し、それ自体を更新することができます。
C#.NETでこれを行うにはどうすればよいですか?(3.5)
objective-c - Objective-C の「メッセージ」 - 正しい読み方は?
基本的に、objective-c でメソッドを宣言し、各パラメーターに 2 回名前を付けることができます。
これは強力だと思いますが、まだ使い方がよくわかりません...
ジョンがケリーに挨拶するとき:
[ p Greet:"John" toPerson:"Kelly" greetWith:"hey babe" ] ;
それについての何かが自然に読めません。経験豊富な Objective-C プログラマーがその「メッセージ」をどのように書くかはわかりません。
誰かが各パラメーターに 2 つの名前を付けた理由と、プログラムに意味を持たせるためにこれを効果的に使用する方法のより有用な例を説明できますか?
また、何か気になります。それは、最初のパラメーターの名前が基本的に「メッセージ」の名前と同じであることです。意味のあるわかりやすいメソッド/「メッセージ名」を書くことで、それをどのように解決しますか?
linux - Linux でプロセス間通信の「キー」を選択する方法は?
良い一日...
私は 5 つのプロセスがあるという宿題をしています。サーバーと残りはクライアントです。各プロセスは、異なる実行可能ファイルから起動されることになっています。双方向のメッセージ パッシング ソリューションを実装する予定ですが、問題はメッセージ パッシング自体に関するものではありません。これらの異なる実行可能ファイル間でキーをやり取りするエレガントな方法はありますか? つまり、次の関数を呼び出すと:
他のプロセスはどのようにキーを知っているはずですか?
宿題で事前に決められたキーを使用することは問題ありませんが、実際のプログラムでそれを行う方法を知りたいです。「私が理解している」のは、関係のないプロセスが一部のユーザーのマシンでマイキーを要求すると、競合が発生する可能性があるためです。