UNIX プロセス間で適度に大量のデータ (ギガバイトではなく数メガバイト) を交換する最良の方法は何ですか?
サイズの制限は十分に許容できるように見えるため、メモリマップファイルになると思います。
双方向通信が必要なので、共通のパイプは役に立ちません。また、ソケットと UDP には、私の知る限り、サイズ制限があります (こちらも参照してください)。の子プロセスと親プロセスの間で通信するのに TCP を使用することをお勧めしますfork()
。
このような関連する質問を読むと、共有メモリ/mmap を推奨する人もいれば、ソケットを推奨する人もいます。
他に調べる必要があるものはありますか?たとえば、データの XML シリアライゼーション/デシリアライゼーションなどを提供することで IPC を支援する高レベルのライブラリはありますか?
コメントによる編集:
私の特別なケースでは、親/コントローラー プロセスといくつかの子 (スレッドを使用できません) があります。コントローラーは、リクエストに応じて、おそらく 1 つの UDP パッケージに収まるいくつかの重要なデータを子に提供します。子プロセスはキー データに基づいて動作し、キーに基づく情報をコントローラーに提供します (情報のサイズは 10 ~ 100MB の場合があります)。
問題: 応答データのサイズ、キーの要求を親に通知するメカニズム、同期 - 親は子に渡した後にキーをリストから削除する必要があり、キーの重複処理は発生しません。
Boost やその他のサードパーティ ライブラリは (残念ながら) 使用しないでください。SunOS 5.10 システムが提供するライブラリを使用できる可能性があります。