ルーチンは両方の言語で安価です。:各ゴルチンは2KBで、Elixirプロセスはそれぞれ0.5KBです。
プロセスの開始を理解しています。ビーム0.5KBのメモリが必要です。この場合は軽すぎます。万病薬そしてErlang、そしてその程度は少ないが行くこれは、あまり安くない独自のプロセスやスレッドに依存する他の言語と比較して、これらのランタイムを使用する利点です。基本オペレーティングシステムではプロセスとスレッド(おそらくより多くのメモリが必要です)
Linuxベースのシステムでプロセスを開始するのに必要なメモリ量を知りたいです。私は、メモリ使用量がプロセスが実行する操作によって異なることを理解しています。しかし、何もしないプロセスを開始すると、メモリコストが発生すると思います。費用はいくらですか?
これについての詳細はどこで確認できますか?これを確認するために使用できるファイル/コマンドはありますか?
答え1
task_struct
Linuxでは、すべてのスレッドまたはプロセスが私のシステムのカーネルで少なくとも1バイトのコストを発生させます。pahole task_struct
これは9,344バイトが必要であることを伝えます。ユーザースペースでは、スレッドにスタックも割り当てる必要がありますが、実際のコストは実際に使用するスタックスペースの量によって異なります(タッチされたページのみが割り当てられるため)。
次のサンプルプログラムが利用可能ですman pthread_attr_init
そしてpthread_create
。後者を使用すると、スタックサイズと生成されるスレッド数を制御できます。つまり、ユーザー空間で単一スレッドのコストを実行し、使用するメモリ量を測定して推定できます。 GNUは多数の実行の平均を計算し、time
この特定のシナリオでは、スタックサイズが64KiBのスレッドあたり48KiBのペナルティを推奨します。
フォークには、プロセス用の新しいアドレス空間だけでなく、カーネルとページテーブルエントリの関連構造を作成することも含まれているため、コストがかかります。