Slide 1

Slide 1 text

© 2020 Funds, Inc. © 2020 Funds, Inc. Overview Project Loom Thinking Usefulness in Scala Funds, Inc. Takato Horikoshi Project Loom 概要と Scala における有⽤性

Slide 2

Slide 2 text

© 2020 Funds, Inc. Whoami Hello, I'm Takato Horikoshi. I'm a Software Developer / Engineering Manager at Funds.

Slide 3

Slide 3 text

© 2020 Funds, Inc. n Tested and verified on a MacBook Pro with an Apple M1 Pro chip. n Scala 3.3.1 n JDK 21 n https://github.com/takat0-h0rikosh1/scala-matsuri-2024 Note Information on the codes listed on this slide. スライドに登場するコードに関する事前情報です。

Slide 4

Slide 4 text

© 2020 Funds, Inc. Project Loom

Slide 5

Slide 5 text

© 2020 Funds, Inc. n Project in OpenJDK n Scalable Concurrency for the Java Platform Overview Java でスケーラブルな並⾏処理の実現を⽬標とするプロジェクトです。

Slide 6

Slide 6 text

© 2020 Funds, Inc. n Virtual Threads n Structured Concurrency n etc... Loomʼs features 本⽇は Loom の機能のうち Virtual Threads と Structured Concurrency につ いてお話します。 Todayʼs topics

Slide 7

Slide 7 text

© 2020 Funds, Inc. Virtual Threads

Slide 8

Slide 8 text

© 2020 Funds, Inc. n Lightweight threads(called Fiber) n Create and manage threads within the JVM n Reduce overhead with creating and managing threads n High throughput. Virtual Threads Virtual Threads は JVM 上で作成・管理される軽量スレッドです。 Fiber と呼ばれていたりします。

Slide 9

Slide 9 text

© 2020 Funds, Inc. How Virtual Threads Work 1 Platform Threads Virtual Threads Java Virtual Machine Operating System OS Thread OS Thread OS Thread OS Thread OS Thread OS Thread Platform Thread Platform Thread Platform Thread Carrier Thread Carrier Thread Carrier Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread Virtual Thread スレッドの⽣成がOSに依存しないため安価に⼤量に作成できるのが特徴です。

Slide 10

Slide 10 text

© 2020 Funds, Inc. How Virtual Threads Work 2 Platform Threads Virtual Threads ブロックが発⽣すると即座に別のタスクを開始するためスレッドのリソースを 効率良く活⽤できます。 IO Block IO Block IO Block IO Block IO Block IO Block IO Block IO Block VT VT VT VT VT VT VT VT VT VT VT Platform Threads Platform Threads Platform Threads Carrier Threads Carrier Threads Carrier Threads

Slide 11

Slide 11 text

© 2020 Funds, Inc. Comparison with Platform Threads Characteristic Platform Threads Virtual Threads Threading style Thread-per platform Thread-per-request style Creation & Context Switching High Cost Low Cost Scalability Millions of threads not practical A Millions of threads possible Thread Pool Management Required Do not pool Compute Large Data Fair Poor スレッドをプールせずに100万スレッド⼀気にスケールすることが可能です。

Slide 12

Slide 12 text

© 2020 Funds, Inc. n high-throughput concurrent I/O-heavy tasks. n ex). pub/sub, large request count Use case Not well-suited for computationally expensive or large- data processing tasks. Ref: https://openjdk.org/jeps/444 I/Oブロックが発⽣しつつも⾼いスループットが要求されるシーンに最適です。 ⼀⽅で⼤規模なデータの計算処理にはあまり向きません。

Slide 13

Slide 13 text

© 2020 Funds, Inc. Virtual Threads in Scala

Slide 14

Slide 14 text

© 2020 Funds, Inc. JDK COMPATIBILITY JDK 21 以上と互換性のある Scala Version を利⽤します。

Slide 15

Slide 15 text

© 2020 Funds, Inc. Future on Virtual Threads Future を Virtual Threads で動かすことができます。

Slide 16

Slide 16 text

© 2020 Funds, Inc. Millions of threads can run おおよそ⼗数秒のうちに100万スレッドの⽣成が完了します。 Console Time: 13986ms Count: 1000000

Slide 17

Slide 17 text

© 2020 Funds, Inc. Try to run 1 million threads in Platform Threads... 同じプログラムを Platform Threads で動かそうとするとどうなるでしょう か...。

Slide 18

Slide 18 text

© 2020 Funds, Inc. Try to run 1 million threads in Platform Threads... Platform Threads で100万スレッドの⽣成は現実的ではありません。

Slide 19

Slide 19 text

© 2020 Funds, Inc. Structured Concurrency

Slide 20

Slide 20 text

© 2020 Funds, Inc. n Preserve the natural relationship between tasks and subtasks n Control task lifetime n maintainable, reliable, and observable Structured Concurrency タスク間の関係・⽣存期間を管理する機能です。 メンテナンス性/可⽤性/観測性を向上します。

Slide 21

Slide 21 text

© 2020 Funds, Inc. What is `Structured` mean? Unstructured Structured sub task task task sub task sub task sub task 構造化することで各タスクの完了時期や結果の⾒通しを⽴てることができます。

Slide 22

Slide 22 text

© 2020 Funds, Inc. Case of `Unstructured` ⾮構造化並⾏処理の例です。即座に例外を投げるタスクと、1秒待機したのち に Goodbye と標準出⼒するタスクを同時に動かしてみます。

Slide 23

Slide 23 text

© 2020 Funds, Inc. Case of `Unstructured` この例ではそれぞれのタスクは好き勝⼿に結果を返します。 完了のタイミングもバラバラです。 The process continues regardless of the result of the other execution.

Slide 24

Slide 24 text

© 2020 Funds, Inc. Join two tasks as a unit while running them in their own threads. Case of `Structured` 構造化された並⾏処理の例です。

Slide 25

Slide 25 text

© 2020 Funds, Inc. Case of `Structured` If even one task fails, the rest are terminated. 複数タスクのユニットを作成します。この例では⼀⽅のタスクが失敗するとも う⼀⽅のタスクはキャンセルされ、唯⼀の結果を返します。

Slide 26

Slide 26 text

© 2020 Funds, Inc. Is the Scala ecosystem introducing or implementing the equivalent of Loom? Well... さて、Loom の機能の Scala Ecosystem への導⼊進捗は…?

Slide 27

Slide 27 text

© 2020 Funds, Inc. Loom(or Similar Function) In Scala Libraries

Slide 28

Slide 28 text

© 2020 Funds, Inc. ZIO Fiber(v2.1-RC1) ZIO には既にタスクを Virtual Threads で実⾏する機能が提供されています。 Run task on virtual thread Console Result: 6268ms Count: 1000000

Slide 29

Slide 29 text

© 2020 Funds, Inc. ZIO Fiber(v2.1-RC1) - Fork in Specific Scope ZIO の Scope を活⽤することでタスクの⽣存期間の ⾒通しが⽴てやすくなります。 Console Still running ... Still running ... Still running ... The innermost scope is about to be closed. Still running ... Still running ... Still running ... Still running ... Still running ... Still running ... The outer scope is about to be closed.

Slide 30

Slide 30 text

© 2020 Funds, Inc. Cats Effects ‒ Fiber(v3.5.4) Run on Fiber Cats Effect は独⾃の軽量スレッドが実装されています。 Runtime に Virtual Threads を指定することも可能です。 Console Time: 4267ms Count: 1000000

Slide 31

Slide 31 text

© 2020 Funds, Inc. Cats Effects - Supervisor(v3.5.4) Supervisor は ZIO の Scope と同等の機能です。 Console Still running ... Still running ... Still running ... The innermost scope is about to be closed. Still running ... Still running ... Still running ... Still running ... Still running ... Still running ... The outer scope is about to be closed.

Slide 32

Slide 32 text

© 2020 Funds, Inc. n Loom-based concurrency API for Scala n Ox を⽤いた Direct-Style Scala ← 06/09 15:20 Ox SoftwareMill 製の Loom を⼟台に実装したライブラリです。明⽇のセッショ ンを楽しみに待ちましょう。

Slide 33

Slide 33 text

© 2020 Funds, Inc. n What is status now?(Akka, Pekko, Monix, ...) Etc... その他のライブラリに関しては...。 是⾮⼀緒にお話しましょう(教えて下さい)。

Slide 34

Slide 34 text

© 2020 Funds, Inc. Summary

Slide 35

Slide 35 text

© 2020 Funds, Inc. n Loom: Scalable Concurrency for the Java Platform n Can be used via libraries n Should be useful Summary Loom の機能・相当機能は⼗分に有⽤性があり、わたしたちはそれすぐに利⽤ することができます。

Slide 36

Slide 36 text

© 2020 Funds, Inc. Thank you

Slide 37

Slide 37 text

© 2020 Funds, Inc. n ZIO は JDK 21 以降の場合に Project Loom の Virtual Thread を使うようにしてい る? Ø https://github.com/zio/zio/issues/4433 Ø Loom への⾔及? Ø https://zio.dev/overview/performance/ Ø https://github.com/zio/zio/releases/tag/v2.1.0 n Virtual Thread 内での Thread.sleep() はどの thread を sleep している…? Ø => ちゃんと Virtula Thread の thread を sleep してくれてるっぽい n Cats Effect を Virtual Threads に乗せる Ø https://jacum.medium.com/running-cats-effect-on-virtual-threads-of- jdk21-7a68ea97fd65 n ピンされるとスケールしない可能性がある(ファイルI/O, JNIコール) Ø https://davidvlijmincx.com/posts/see-pinned-virtual-threads/ Appendix