Loomは軽量スレッドであるFiberと、継続(Continuation)をJavaに導入することを狙っています。Loomはまだ提案されたばかりで、OpenJDKのプロジェクトとして登録されていません。現在は、プロジェクトの提案を参照することが可能です。2017レポート、ここ数年で最も充実していたキーノート:ITpro僕も軽量スレッド?Fiber?という感じです(継続はまだしも)。Loomそのものの前にFiberを調べてみます。すると、"Quasar"という製品に行き着きます。JVM"、JVM用軽量スレッドとアクターです。fibers.Quasarのコア実装はJVM上のホンモノの軽量スレッドで、fiberと呼ばれるものです。fiberは通常のスレッドのようにインスタンス生成と実行ができますが、単一のJVMではスレッドでは数千といったところでもfiberなら簡単に数十万、数百万でさえ実行できます。Loomでのfiberと同一なのか?という疑問が起こります。proposal.openjdkのメーリングリストを見れば、Quasar実装者がオラクルに入ってこの提案を書いたとわかるよ。NewsHIbernateとJPAのような関係でしょうか。Quasarのfiberがベースと考えてよさそうです。課題を置き換えて、Quasarのfiberは何なのでしょう?JReble/XRebelで有名なZeroTurnaround社のブログに記事があります。API.(単純に言うと)fiberはスレッドであり、完全にスレッドのように使える、ということです。スレッドはOSが実装しているものに対して、fiberはユーザモードで実装されるものです。このユーザモードというのはJavaの話ではなく、CPUのモードの話です。つのモードがあります。つのモードの間で使うプロセッサのスイッチは、プロセッサ上で実行されているコードの種類によって異なります。モードでそれぞれ実行されます。Drivers)そもそもOSスレッドにはパフォーマンス上のペナルティがあります。スレッド間のスイッチにはユーザモードからカーネルモードへのジャンプが含まれ、アドレス空間境界を越えることもあります。これはコストの高い操作で、TLBのフラッシュやキャッシュミス、CPUのパイプラインを混乱させるといったことを引き起こします。割り込みやsyscallが通常のプロシージャコールよりとてつもなく遅くなる理由です。カーネルのスケジュールスレッドは汎用スケジュールアルゴリズムを使っており、あらゆる種類のスレッドを考慮します。fiberはアプリケーションレイヤでスケジュールされているので、アプリケーション外のことは考慮せずに済みます。IOや他のfiberから起動され、プロセッシングサイクルが短く、キューなど他の同期メカニズムで次のfiverに処理を移すというfiberの振る舞いは、スケジューラに“work-stealing”アルゴリズムを採用するのがよく、これはErlangやGoで採用されており、Quasarでもデフォルトで使うようです。fiber間の切り替えで最小のキャッシュミスで済みます。カーネルは高い並列性ではボトルネックとなるようです。スレッドでのカーネルデータ構造を避けることで、メモリフットプリントや効率的なスイッチを得られます。fiberはどのように使うのでしょうか?Javadocを見てみます。default).fiberの生成方法は2つある。Fiberクラスのサブクラスを作りrunメソッドをオーバーライドするか、コンストラクタのtargetパラメータにfiberで実行させたいコードを渡すかだ。全体的にFiberのAPIはThreadクラスに多くの点で似ている。fiberはForkJoinPool内で動作する。OOPがオンであるとき。これらはデフォルトでそうなっている)。}}.start();ジェネリックで戻り値を定義できます。body}Kotlinにはkotlinx.coroutines(コルーチン)もあるでしょうし、この辺りの住み分け/違いはどうなっているのでしょうか?strandやpark/unparkといった項目もありますので、引き続き調べます。Quasarのドキュメントはしっかりしていますので、詳細はそちらから。11でのみ発生します。関西Javaエンジニアの会の代表/発起人です。JVMやJavaについて書きます。(51)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。