私は現在、Scala のアクターについて学んでいます。この本では、システムが使用するスレッドを減らすことができるため、のreact
代わりに メソッドを使用することを推奨しています。receive
スレッドの作成にコストがかかる理由を読みました。しかし、いったんスレッドを取得すると (初期化後に Scala のアクター システムに保持する必要があります)、それらを使用するとコストがかかる理由は何ですか?
主にメモリ消費ですか?それとも他の理由がありますか?
私は現在、Scala のアクターについて学んでいます。この本では、システムが使用するスレッドを減らすことができるため、のreact
代わりに メソッドを使用することを推奨しています。receive
スレッドの作成にコストがかかる理由を読みました。しかし、いったんスレッドを取得すると (初期化後に Scala のアクター システムに保持する必要があります)、それらを使用するとコストがかかる理由は何ですか?
主にメモリ消費ですか?それとも他の理由がありますか?
多くのスレッドを使用すると、予想よりもコストがかかる場合があります。理由は次のとおりです。
スレッドを使用することによるメモリ オーバーヘッド (小さい場合も小さい場合もあります) に加えて、通常、スレッドを多く使用することは、CPU を取得するスレッドを選択するときに、スケジュールで考慮すべき要素が増えることを意味します。次。
一部のオペレーティング システム/JVM では、同時に存在できるスレッドの量に制限がある場合もあります。
最終的には、最終的に大きな原因となる小さなオーバーヘッドの蓄積です。そして、これは実際には Java に固有のものではありません。
スレッドを持つことは「高価」ではありません。もちろん、ここで話している数によって多少異なります。何十億ものスレッドが問題になると思います。一般的に言えば、多くのスレッドを持つことは、より多くの並列作業を行うことができるため、コストがかかると考えられていると思います。これにより、CPU が増加し、メモリが増加します...しかし、それらが正しく管理されている場合 (たとえば、システム リソースを保護するためにプールされている場合)、大丈夫です。JVM は必ずしもネイティブ スレッドを使用するとは限らないため、Java スレッドは必ずしも OS ネイティブ スレッドにマップされるとは限りません (たとえば、グリーン スレッドや軽量スレッドを見てください)。私の意見では、JVM のスレッドには暗黙のコストはありません。コストは、不十分なスレッド管理と、リソースに不用意に作業を割り当てることによるリソースの過剰使用に起因します。