2017-10-22 6 views
1

私がマルチスレッドに関して読んだ記事の多くは、1つのスレッドが実行されているときに、1つの使用可能な論理プロセッサ(またはコア)によって処理されます。 hyper-v論理プロセッサごとに2つのスレッドがあります。Java Visual VMの実際の実行スレッド

しかし、Java VisualVMのスレッドタブに「実行中」とマークされている21個のスレッド(ユーザー作成スレッド)があると、混乱してしまいます。 My Laptopには4つの論理プロセッサしかないためです。

私のプロセッサはハイパースレッディングテクノロジをサポートするIntel(R)Core(TM)i5-3210M CPU @ 2.50GHz 2.50GHzであり、一度に8つのスレッドしか処理できません。これが起こったことができますどのように

enter image description here

誤解がある場合は教えてください。

+0

あなたは誤解しました。何百ものスレッドが存在する可能性があり、OSは各スレッドの作業を1つのコア上で数ナノ秒実行し、次のスレッドなどを実行するようスケジュールします。 – fredt

+0

情報をお寄せいただきありがとうございます。この文脈で私はJava User Created Threadを意味しています。上記の何百ものスレッドと同じように認識できますか? –

+0

はい。 「Java User Created Thread」は、Javaプロセスが実際に作成するときに、OSによって実際に作成され、スケジュールされます。 – fredt

答えて

2

スレッドが実行されている(スリープ状態または何かを待っている状態ではなく)ことを意味します。これは、多くのコアがないため、すべてのスレッドが同時に実行されているわけではありません。彼らはすべて実行するためにタイムスライスのために競争します。

+0

あなたの答えをありがとう。それを感謝します。 これについての参考情報がある場合は、 –

2

VisualVMは、JVMのビューからのスレッドについてしか認識していないため、オペレーティングシステムが実際に行うスケジューリングは反映されません。実行スレッド数が多いということは、OSが直ちに作業できるようにスケジューリングできるスレッドが21個あることを意味します。

Thread.Stateのjavadocsを見て、さまざまな状態がJVMの意味でどのようなものかを確認できます。

+0

とお聞かせください。あなたの答えは@Kayamanと同じです。どうもありがとうございます。それを感謝します。これについての参考情報があれば、私に知らせてください。 –

+1

特定のグラフを表示するために使用される 'Thread.State'へのリンクが追加されました。 – Kiskae

関連する問題