検索

Threadprocs – 単一アドレス空間を共有する実行可能ファイル(0コピーポインタ)

このプロジェクトは、複数の独立したプログラムを単一の共有仮想アドレス空間内で起動しながら、それらが別々のプロセス(独立したバイナリ、グローバル変数、ライフタイム)のように振る舞うことを実現します。threadprocsがアドレス空間を共有すると、適切に動作するLinuxバイナリではコード変更なしでポインタが有効になります。スレッドとは異なり、各threadprocは独立した半隔離プロセスです。dlopenベースのプラグインシステムとは異なり、threadprocsは`main()`関数を持つ従来の実行可能ファイルを実行します。POSIXプロセスとは異なり、threadprocsは同じアドレス空間を共有するため、ポインタが有効なまま維持されます。これは、`std::string`や`std::unordered_map`のような慣用的なポインタベースのデータ構造をthreadprocs間で渡し、直接アクセスできることを意味します(通常のデータ競合の考慮は必要です)。これは、pthreadsとマルチプロセス共有メモリIPCの中間的なプログラミングモデルを実現します。実装は、ロード時のASLRと仮想アドレスレイアウトの制御、`exec()`のユーザースペース類似機能の実装、およびthreadprocのファイル記述子やシグナルなどの注意深い操作に依存しています。これは完全に特権のないユーザースペースコードで実装されています:< https://github.com/jer-irl/threadprocs/blob/main/docs/02-imp... >。シンプルなデモでは、< https://github.com/jer-irl/threadprocs/tree/main?tab=readme-... >で「クロスthreadproc」メモリ参照解除を示しており、高レベルな図も含まれています。これは、共有メモリ(リングバッファやフラットテーブルが一般的)を使用するマルチプロセスシステムに関連しています。これらの設計では、シリアライゼーションやコピーが必要になることが多く、慣用的なC++やRustのデータ構造から離れがちです。ポインタベースのデータ構造は直接渡せません。重要な制限やエッジケースがあり、これが実用的なモデルかどうかは明確ではありませんが、このプロジェクトは、システムを独立起動コンポーネントとして構成しつつ、従来のプロセスメモリ境界を緩和する方法を探求しています。

  • オープンソース
  • クラウドネイティブ
  • コード生成

AI サマリー

Threadprocsは、複数の独立した実行可能ファイルが単一の共有仮想アドレス空間内で動作し、プロセス的な分離を維持しながら直接ポインタアクセスを可能にします。このアプローチは、スレッドと従来のマルチプロセス共有メモリの中間的な選択肢を提供します。

おすすめ対象

新しいプロセス間通信方法を探求するシステムプログラマ, コンポーネント間で大規模で相互接続されたデータ構造を扱う開発者, メモリの分離と共有技術を研究する研究者

重要な理由

独立して起動された実行可能ファイルが単一のアドレス空間を共有することで、ポインタベースのデータ構造を直接かつゼロコピーで共有できるようにします。

主な機能

  • 独立したプログラムを単一の共有仮想アドレス空間に起動します。
  • プロセスに似た振る舞い(バイナリ、グローバル変数、ライフタイム)を個別に維持します。
  • Linux上で'threadprocs'間のゼロコピーポインタ共有を可能にします。
  • 慣用的なC++/Rustデータ構造(例:std::string)への直接アクセスをサポートします。

ユースケース

  • ゲーム開発者は、threadprocsを使用して、異なるゲームモジュール(例:AI、物理演算、レンダリング)を同じメモリ空間を共有する独立した実行可能ファイルとしてロードできます。これにより、シーングラフやキャラクター状態などの複雑なデータ構造をモジュール間で直接、ゼロコピーで受け渡すことが可能になり、従来のIPCやシリアライゼーションに比べてモジュール間通信を簡素化できます。
  • 高性能データ処理パイプラインを構築するシステムプログラマーは、threadprocsを活用して、異なる処理ステージ(例:取り込み、変換、分析)を個別のバイナリとして実行するかもしれません。このアーキテクチャにより、大規模な配列や複雑なオブジェクトグラフなどの共有データバッファを、コピーやシリアライゼーションのオーバーヘッドなしに直接操作でき、スループットの向上が期待できます。
  • 複雑なシミュレーション環境を開発する研究者は、threadprocsを活用して、異なるシミュレーションコンポーネント(例:エージェントの行動、環境相互作用、データロギング)を独立してコンパイルされたプログラムとして管理できます。これにより、シミュレーション状態のシームレスな共有と共有データ構造への直接アクセスが可能になり、シミュレーションロジックの迅速なプロトタイピングと反復が促進されます。