1

(これは低遅延システム用です)

受信した UDP パケットを共有メモリの領域に転送するコードがあると仮定すると、共有メモリを読み取る時間になったことを (ユーザー モードで) アプリケーションに通知するにはどうすればよいでしょうか? アプリケーションが継続的にポーリングして CPU サイクルを消費することは望ましくありません。

共有メモリに書き込んだ直後にアプリケーション コードを呼び出すことができるコードをネットワーク スタックに挿入することはできますか?

EDIT Cタグを追加しましたが、アプリケーションはC++になります

4

2 に答える 2

0

あるUnixプロセスから別のプロセスにイベントを通知する1つの方法は、POSIXセマフォを使用することです。sem_openを使用して、クロスプロセスで使用できる名前付きセマフォを初期化して開きます。

Cでsem_openへの複数の呼び出しを機能させるにはどうすればよいですか?を参照してください。。

同じホスト上のプロセス間でイベントを通知するための最も待ち時間の短い方法は、変更する(共有)メモリの場所を探すためにスピン待機することです...これにより、システムコールが回避されます。アプリケーションのポーリングは望ましくないと明確に述べましたが、マルチコアシステムで実行されているマルチスレッドアプリケーションでは、レイテンシーを本当に気にしているのであれば、それは悪いトレードオフではないかもしれません。

于 2013-03-15T21:46:59.137 に答える
0

リアルタイム OS を使用する予定がない限り、「即時」プロトコルはありません。CPU リソースは数ミリ秒単位で利用可能であり、通常、ユーザー スレッドが処理を続行できることを理解するには時間がかかります。

上記のすべてを考慮すると、ローカル ソケット、シグナル、パイプ、イベント記述子など、どのような形式の IPC でも機能します。実際のパフォーマンスの違いは悲惨です。

さらに、共有メモリを使用すると、メンテナンスやデバッグが不必要に複雑になる可能性がありますが、それは設計者の選択です。

于 2013-03-15T22:57:33.923 に答える