私は、プロセス内で共有メモリを利用できるように、POSIXスレッドを利用するソフトウェアを作成しました。私の質問は、マシンに4つのプロセッサを搭載したUbuntuを実行し、各プロセッサに16のコアがある場合です。 4つのプロセスをそれぞれ16個のスレッドまたは1個のプロセスで64個のスレッドで実行する方が効率的ですか?各プロセッサには32GBの専用RAMが搭載されています。マルチプロセッサシステム上のPOSIXスレッド
私の主な心配は、1つのプロセスで見られることの後ろに起こっているmemcopyがたくさんあるということです。要約する
:4(16core)PROCマシン
1プロセス64のスレッドで
?
4プロセス16スレッド?
プロセスが32 GB以上のRAMを必要とする場合(1つのProc専用の量)、回答が異なりますか?
ご協力ありがとうございました
スレッドは通信しませんが、データを共有します。多数のファイルの初期ロードと残りの実行でも一定のままである共有構造の作成があります。これは大量のRAMを必要とするため、複数のスレッドを実行する方が複数のプロセスよりも優れています。ロードが完了すると、スレッドが作成され、独立して動作します。共有メモリが変更されないため、同期やロックの問題は発生しません。これはあなたの意見を変えますか? – RussS
オプションは、スレッドを生成するのではなく、複数のプロセスにデータとフォークをロードすることです。子プロセスは引き続きすべてのデータを共有します。このようにして、スレッドサポートでコンパイルする必要はありません。しかし、それは顕著な違いを作ることができません。 –
私はfork()が親プロセスのメモリを共有するのではなく、それを複製するという印象を受けましたか? – RussS