私は最近、1 つの特権スレッドが複数のワーカー スレッドを管理する、おなじみのスレッドによるマスター ワーカーパターンで設計されたサーバー アプリケーションの作業を開始しました。スレッドって本当に面倒くさいんだなと改めて実感しました。
スレッドではなくプロセスに移行する可能性を現在検討しています。プロセスは私が経験している多くの問題を解決するからです。
ただし、パフォーマンスは大きな懸念事項であり、L2/L3 キャッシュ内の領域を競合する重複データ (ルックアップ テーブル、コンテキスト データなど) によりメモリ使用量が増加すると、パフォーマンスが低下するのではないかと懸念しています。このデータは時々変更する必要があり、非常に大きくなる可能性があります。
hash_table files;
function serve_file(connection, path)
file = hash_table[path]
sendfile(connection.fd, file.fd, 0, file.size);
function on_file_added_to_server_root(which)
files.add(which, ...)
ワーカー プロセスを考えると、このテーブルのコピーがN
あれば残念です。N
ただし、一部のテーブルは、どこにでも複製するのに最適です。しかし、malloc(3)
潜在的に共有される可能性のある割り当てられたメモリも多数ありますが、あちこちに散在している可能性があり、コピーオンライトのためにランダムなページが複製されます。
マルチプロセス設計でメモリ使用量を抑えるための秘訣や一般的な戦略はありますか?
ありがとう!