スレッドの作成にはコストがかかると考えられるのはなぜですか?
Java チュートリアルでは、スレッドの作成には多大なコストがかかると記載されていますが、この背後にある実際の理由は次のとおりです。費用は依然として不透明なままである。この記事では、JVM でのスレッド作成のメカニズムを詳しく掘り下げて、そのコストの高さに寄与する要因を明らかにします。
プラットフォーム依存のオーバーヘッド
スレッドの作成には、次のようなオーバーヘッドが伴います。プラットフォームによって異なります。ホスト OS 内でのネイティブ スレッドの確立、スレッドのスタックに大きなメモリ ブロックの割り当て、JVM と OS のデータ構造の初期化はすべて、このオーバーヘッドに追加されます。
リソース消費
ネイティブ スレッドは、一度作成されると、その存続期間を通じてかなりのリソースを消費します。これらには、割り当てられたスレッド スタック、スタックからアクセスできるオブジェクト、JVM スレッド記述子、および OS ネイティブ スレッド記述子が含まれます。
ベンチマークの証拠
ベンチマーク演習により、スレッドの作成が明らかになりました。 2002 年に Java 1.4.1 を実行するデュアルプロセッサ Xeon システム上で、毎秒約 4000 件の速度で発生しました。最新のプラットフォームではパフォーマンスが向上していますが、スレッドの作成は依然として比較的高価です。
仮想スレッドとプロジェクト ルーム
Java プラットフォームは、伝統的にパフォーマンス上の理由からネイティブ スレッドを採用してきました。ただし、OpenJDK Loom プロジェクトでは、潜在的なソリューションとして仮想スレッドを導入しています。これらのスレッドは、ネイティブ スレッドとグリーン スレッドを組み合わせたハイブリッドであり、同時実行性を維持しながらネイティブ スレッドの作成に関連するオーバーヘッドを削減することを目的としています。
OpenJDK でのスタック割り当て
OpenJDK 6 Linux では、mmap を使用して、pthread_create 呼び出しを通じてネイティブ スレッドにスタック メモリを割り当てます。このメモリは、新しい Java スレッド スタックのゼロ化に関する JVM 仕様の前提条件に従って、自動的にゼロに初期化されます。
要約すると、新しいスレッドの確立に伴うかなりのオーバーヘッドのため、スレッドの作成はコストがかかると考えられます。ネイティブ スレッドは、大きなメモリ ブロックを割り当て、その有効期間全体にわたってさまざまなリソースを消費します。さらに、プラットフォーム固有の要因がスレッド作成の正確なコストに影響します。
以上がJava でスレッドを作成するとコストがかかると考えられるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。