アカウント名:
パスワード:
大昔(バージョン1.5)にスレッドプールが導入され、「ネイティブスレッドの都度生成は止めて使いまわしましょう。Threadではなくタスク(Runnable)を使いましょう。」で並行処理は組まれているでしょう。なぜ今更仮想スレッドが必要になるのでしょうか?
JEP425によると、従来の方法では待機処理に対して効率が悪いと指摘しています。Javaでは待機処理はネイティブスレッドそのものを止めてしまい、待っている間に他のタスクを実行することはありません。そのため、待機処理が1秒あるタスクを従来のスレッド200個で処理する場合は待機処理の制約により最大200件/秒の処理速度しかでません。スレッドの数を増やせば処理速度は改善しますが、ネイティブスレッドではOSの制約により多く作ることはできません。
一方、仮想スレッドの場合はOSの制約無く大量に作ることができ、10000件のタスクがあれば10000個の仮想スレッドを作成するといった方法でスループットを改善できます。
典型的なアプリケーションサーバーでは待機(たとえば、外部サーバーからのレスポンス待ちとか?)を含む大量の処理を行うため、仮想スレッドによりスループットの改善が見込めます。
# 仮想スレッドの速度自体はネイティブスレッドより速いわけではないので、# 待機の無い計算負荷の高い処理にたいして、仮想スレッドは助けにならない。# とJEPには書いてあるけど、どうして記事ではその点を書いてないのだろう?
仮想スレッドとネイティブスレッドの速度差について昔は確かにネイティブの方が速いと言われてたが今はネイティブのオーバーヘッドが無視できなくなって必ずそうとは限らなくなったということ
特に最近のCPUの進化が変な方向に行っていてネイティブスレッドのオーバーヘッドが余計に大きくなった感じある
本質的に ExecutorService と変わらんだろ、と言いたいのはわかるけど。現行の仕様だと実行中にIO入ったら切り変えていい、とはならないのでは。多分裏ではIOの所で io_uring とかを使う想定で、async/await 構文を導入する布石なんじゃないかな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
記事の内容だけだと、スレッドプールでいいやん (スコア:0)
大昔(バージョン1.5)にスレッドプールが導入され、
「ネイティブスレッドの都度生成は止めて使いまわしましょう。Threadではなくタスク(Runnable)を使いましょう。」
で並行処理は組まれているでしょう。なぜ今更仮想スレッドが必要になるのでしょうか?
JEP425によると、従来の方法では待機処理に対して効率が悪いと指摘しています。
Javaでは待機処理はネイティブスレッドそのものを止めてしまい、待っている間に他のタスクを実行することはありません。
そのため、待機処理が1秒あるタスクを従来のスレッド200個で処理する場合は待機処理の制約により最大200件/秒の処理速度しかでません。
スレッドの数を増やせば処理速度は改善しますが、ネイティブスレッドではOSの制約により多く作ることはできません。
一方、仮想スレッドの場合はOSの制約無く大量に作ることができ、10000件のタスクがあれば10000個の仮想スレッドを作成するといった方法でスループットを改善できます。
典型的なアプリケーションサーバーでは待機(たとえば、外部サーバーからのレスポンス待ちとか?)を含む大量の処理を行うため、仮想スレッドによりスループットの改善が見込めます。
# 仮想スレッドの速度自体はネイティブスレッドより速いわけではないので、
# 待機の無い計算負荷の高い処理にたいして、仮想スレッドは助けにならない。
# とJEPには書いてあるけど、どうして記事ではその点を書いてないのだろう?
Re: (スコア:0)
仮想スレッドとネイティブスレッドの速度差について
昔は確かにネイティブの方が速いと言われてたが
今はネイティブのオーバーヘッドが無視できなくなって必ずそうとは限らなくなったということ
特に最近のCPUの進化が変な方向に行っていて
ネイティブスレッドのオーバーヘッドが余計に大きくなった感じある
Re: (スコア:0)
本質的に ExecutorService と変わらんだろ、と言いたいのはわかるけど。
現行の仕様だと実行中にIO入ったら切り変えていい、とはならないのでは。
多分裏ではIOの所で io_uring とかを使う想定で、async/await 構文を導入する布石なんじゃないかな。