次のアプリケーションについて考えてみます。起動時に、ディスクから読み取られたデータに基づいてWebページの大規模なメモリ内インデックスを作成するWeb検索サーバー。初期化されると、メモリ内インデックスは変更できず、ユーザークエリを処理するために複数のスレッドが開始されます。サーバーがネイティブコードにコンパイルされ、OSスレッドを使用していると仮定します。
現在、スレッドモデルはスレッド間の分離を提供しません。バグのあるスレッドまたはスレッドセーフでないコードは、他のスレッドによって割り当てられ、論理的に属しているインデックスまたはメモリを破損する可能性があります。このような問題の検出とデバッグは困難です。
理論的には、Linuxはより良い分離を強制することを可能にします。インデックスが初期化されると、それが占有するメモリを読み取り専用としてマークできます。スレッドは、インデックスを共有するプロセス(共有メモリ)に置き換えることができますが、それ以外のプロセスは別々のヒープを持ち、相互に破損することはありません。不正な操作は、ハードウェアとオペレーティングシステムによって自動的に検出されます。ミューテックスやその他の同期プリミティブは必要ありません。メモリ関連のデータ競合は完全に排除されます。
そのようなモデルは実際に実行可能ですか?そのようなことを行う実際のアプリケーションを知っていますか?それとも、そのようなモデルを非現実的にするいくつかの根本的な問題がありますか?このようなアプローチでは、従来のスレッドと比較してパフォーマンスのオーバーヘッドが発生すると思いますか?理論的には、使用されるメモリは同じですが、処理を遅くする実装関連の問題がいくつかありますか?