Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

はじめに

前回の「Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -」に続いて、
ちょっとだけディープな「中身」のお話を。

最新のJava(21以降)を使うと、プログラムがどんなふうに動いてくれるのか。
進化し続けている、Javaを紹介しちゃいますね。

気づかせてくれるのは、Gemini3ちゃんなんだけどね。

1. JavaのスレッドはOSのスレッドで動く!

これまでスレッドって「なんとなくの処理の集まり」くらいに思っていたけれど、
実は今のJavaは、PCの中にある**「CPUコア(計算機)」に直結**して動いていることを知りました。

漠然と「スレッド」というものを理解していましたが、ちゃんと紐づいている。
知りませんでした。

「1つの処理(スレッド)は、常に1つのコアが担当する」 これが基本的なルールなんだそうです。

2.もっと有効的に使おう!バーチャルスレッド!

上記のように1:1で対応するというのが基本の考えで、
Javaであろうと、1スレッド1CPUの考えは変わらないそうです。

たとえば、今回のように数千の天体があって、個別にスレッドを割り当てている場合ならば、
数千スレッドがCPUに割り当てられるとか。

その考え方を変えて、キャリアスレッドというものが、一度引き受けて、論理的なスレッドにしているらしいです。
CPUに対して数千スレッドを作るわけではなく、その数千スレッドはJavaで振り分けをして、
CPUに対する負荷を下げよう。という試みみたいです。

3. 暇なコアを作らない!賢い仕事分散をするよ!

今のCPUはコアがたくさんありますが、中には「重い処理」でハマっちゃうコアも出てきます。
そこでJavaの最新機能が本領発揮!

基本は順番待ち

基本的には自分の担当するコアでお行儀よく並びます。

暇なコアが助けに来る

「あっちのコア、ハマってるな。暇だから手伝ってやるよ!」

暇になったコアが、忙しいコアの行列の**「後ろ」から**ガバっと!勝手に仕事を奪い取って、代わりに処理を始めちゃうんです。
これ、「ワークスティーリング(仕事泥棒)」って名前がついているらしいです。
名前はちょっと・・・ですが、おかげで全コアが働いてくれて、効率的に仕事をしてくれるようになるそうです。

アップデートが必要なきん

なかなかJavaのアップデートについていけないわたし、きん。

よりよくなっている屋台骨?土台?そこにもスポットライトを当てて、今後も紹介していけたらと思っています。

もしかしたら・・・

シューティングゲーム編で、1スレッドでかなり重い処理を割り当てているので、見直してみようかな・・・

と思っている次第です。

やる気になったら、やってみますね~。

(蛇足)「効率」をとるか「順番」をとるか

「後ろから奪ったら、順番が入れ替わっちゃうんじゃない?」 鋭い人ならそう思うはず。はい、その通りなんです!
でも、今のJavaはこう割り切っています。
「銀行の振込みたいに順番が命の処理は、今まで通り丁寧にやろう。」
「でも、シミュレーターの計算みたいに大量の処理は、少しくらい順番が前後しても、全コアを使って速く終わらせるほうがいいよね!」
だそうです。(Gemini3ちゃん談)

さいごに

どちらかというと、フロントエンド側で語られることは少ないJava。
でも、使い方次第で、使えるんだよ。って再認識させられる。

わたし自身が一番の推しがJavaってことがあるけれど、
(30年くらいやってるからね・・・)
(最近はフロントエンド側はJavaScriptベースだけどねー。わたしは)
まーまったりと紹介できたら~♪と思っています。

今回の記事まとめ

Javaで太陽系天体シミュレーター&JavaをExe化してみました。(Java21以降対応)
Javaをexe化してみる(2)- jpackageの活用 と 自動化バッチの紹介 -
Javaのバーチャルスレッドを利用してみた(3)感想とゲーム利用の有効性について考察

Youtubeに載せました♪
https://youtu.be/NPsgNbhEtds

シェアしていただけるとうれしいです。

投稿者:

kinchannn

きんです。 よろしくおねがいいたします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA