Project Loom - 限定継続と軽量スレッド
櫻庭さん
Project Loom
Thread: 糸
Fiber: 遷移
Loom: 織機
並列処理は難しい
スレッドセーフ != スケールする
CPUが遊んでいる
同時に複数からアクセスできない
ロック、ファイル、通信、DB
待っている間のコンテキストスイッチ、タスクスイッチ
wait - notifyAll
OS によるコンテキストスイッチ
スイッチのタイミングが分からない
スレッドの状態を保存する必要がある
JVM Stack Area
スレッドごとにスタックを持っている
JVMスタック、オペランドスタック、ローカル変数、ネイティブスタック
メモリを保持する必要がある
JVMが管理するスレッドが必要 -> Fiber
(限定)継続と言ってよいのでは?Delmited Continuation
Fiber: Continuation + Scheduling(ExecutorService <- ForkJoinPool)
Continuation
run()
yield()
Runnable
code: multi.java
new Continuation(scope, Runnable).run()
Fiber: JVMが管理する軽量スレッド
省メモリ、タスクスイッチコストが低い
Thread と同じように使える
Runnable, Callable
schedule()
park()
unpark()
パッケージプライベートなので、ライブラリが使う
code: fiber.java
Fiber.schedule(Runnable)
// CompletableFuture も戻り値に取れる
使ってくれるライブラリ
java.util.concurrent
Networking, Pipe
Fileがまだ...!
モニタからは yield できない...
ReentrantLock を使う
スループットがFiberの方が出る
結構置き換えられる
ThreadLocal
Thread.currentThread
shadowThread
Linux x64, MacOS のみ