- 櫻庭 祐一 @skrb
- 余談
- 「今回の発表、対して役に立たないヨ」
- 「Project Loomでるまでに3年はかかるヨ」
- この発表は「Safe Harbor Statement」
- 信じないでね!って意味ですw
- 皆さんは意味がわかりますか?
- Thread
- 糸
- Fiber
- 繊維
- Loom
- 織機
- Thread
- 並列/並行処理は難しい
- モニタ,イミュータブル, アトミック, 競合状態, 再入...
- スレッドセーフでもスケールしない (安全である≠スケールしない)
- なぜスケールしないのか
- CPUが遊んでいる
- 同時に複数からアクセスできないもの
- ロック ファイル 通信 DB ...
- 待ち状態になったら他のものに譲る
- コンテキストスイッチのような
- コンテキストスイッチ
- take/put的な処理もwait/notifyAllを使えば動くよね
- takeが
wait()
で譲れば良い/putも同様に- ただ...
- wait/notifyAllの問題点
- OSによる Context Switch
- スイッチがいつ行われるか不明
- スレッドの状態をすべて保存
- Work-ing Memory / Head...
- Meta Space (旧パーマネント領域)
- JVM Stack Area
- N個スレッドがあったら N個スタックができる
- Operand Stack / Local Variable、メソッドチェーン分はいるよね
- メモリ領域めっちゃ喰うよね
- まとめ
- JVMスタック
- オペランドスタック
- ローカル変数
- ...
- OSによる Context Switch
- OSによらず JVMが管理するスレッドが必要
- Fiber
- Fiber = Continuation + Scheduling(EcecutorService, Default: ForkJoinPool)
java.lang.Continuation
- タスク処理の中断/再開
- run()
- yeild() ... だれかにゆずる的な意味で
- Runnable
- 普通の人はダイレクトにつかわないよねwww
- 普通の人は Fiber のほう使うと思う
- タスク処理の中断/再開
java.lang.Fiber
- JVMが管理する軽量スレッド
- Threadと同じように使う
- 多少は制限があるが
- タスク
- Runnable
- Callable
- schedule()
- park()
- unpark()
- park/unpark
- 内部で
Continuation.yield
呼んでいる - Package Privateなので普通の人は使えないw
- 内部で
- park/unparkを行うAPI
- Thread sleep,join
java.util.concurrent
- I/O
- Networking
- Pipe
- まだ未対応だが...
File
- 現状の制限
- ネイティブスタックからは yeild できない
- モニタからは yeild できない
- これが結構痛い
- どうすればいい?
- MonoContainerをFiber対応に
- wait/notifyAllを
ReentrantLock
に変更すればよい
- wait/notifyAllを
- 安易に
synchronized
はやめましょうねw
- MonoContainerをFiber対応に
- Thread Pool(ExecutorService) vs Fiber
- (コード略)
- Oracle Break New Groundで公開予定?
- だいたい2倍のスループットがでている
- (コード略)
- FiberがThreadの代わりになる?
- かなり置き換えられる!
- 問題点は先述
- 現状の問題
- ThreadLocal
- Thread.currentThread
- 現状 shadowThread で対応
- 今後はわからない...
- かなり置き換えられる!
- Current Status
- サポートしているOS
- Linux x64
- Mac OSX
- Windowsは...笑
- サポートしているOS
- Conculusion
- Fiber: JVMが管理する軽量スレッド
- Continuation:限定継続を実現
- いつリリースされるか...???