Slide 1

Slide 1 text

Θ͔ͬͨؾʹͳΔɺCoroutine1.7.0ͷ νϟϯωϧͷύϑΥʔϚϯε޲্ 2023.05.13 KotlinConf 2023 Global in Kyoto Bunjiro Miyoshi

Slide 2

Slide 2 text

About Me • teamLab Inc.ॴଐ • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • ࠷ۙGoogle/TinkͷKMMϥούʔϥΠϒϥϦ࡞ͬͨ • https://github.com/RyuNen344/tink-kmm

Slide 3

Slide 3 text

kotlinx.coroutine 1.7 ϦϦʔε͞Ε·ͨ͠Ͷ

Slide 4

Slide 4 text

Release Note

Slide 5

Slide 5 text

Release Note runTestͷdefault timeout͕60s͔Β10sʹมߋ͞ΕͨΓ

Slide 6

Slide 6 text

Release Note Kotlin NativeʹDispatchers.IO͕ొ৔

Slide 7

Slide 7 text

Release Note Kotlin NativeͷOld Memory Model͕࡟আ͞Εͨ

Slide 8

Slide 8 text

Release Note Channelͷ࠶࣮૷

Slide 9

Slide 9 text

࿩͢͜ͱɾ࿩͞ͳ͍͜ͱ • ࿩͢͜ͱ • چ࣮૷ɾ৽࣮૷ͷҧ͍ • ;ΜΘΓͱͨ͠Lock freeपΓͷ࿩ • ࿩͞ͳ͍͜ͱ • Lock freeपΓͷఆٛతʹਖ਼͍͠ղઆ • kumagi͞Μͷࢿྉ͕ͱͯ΋ษڧʹͳΓ·͢ • https://www.docswell.com/s/kumagi/ZP99EQ-lock-free • Ktor౳ͷ3rd PartyϥΠϒϥϦ΁ͷӨڹ

Slide 10

Slide 10 text

ͳͥ࠶࣮૷ #1 • σʔλߏ଄͸Concurrent Double Linked List • ͦ΋ͦ΋ޡͬͨཧ࿦Λݩʹ࣮ͯ͠૷ • อकੑͷ໰୊ • ઢܗԽՄೳੑͷ໰୊ • ૢ࡞͕ஞ࣮࣍ߦ͞Ε͍ͯΔ͜ͱͷอূ

Slide 11

Slide 11 text

ͳͥ࠶࣮૷(Double Linked List) #1 ઌ಄ͱ࠷ޙͷϙΠϯλΛอ࣋ w w w w

Slide 12

Slide 12 text

ͳͥ࠶࣮૷(Double Linked List) #1 ཁૉ͸ྡ઀͢Δ஋ͷϙΠϯλΛอ࣋

Slide 13

Slide 13 text

ͳͥ࠶࣮૷(Double Linked List) #1

Slide 14

Slide 14 text

ͳͥ࠶࣮૷(Double Linked List) #1 ৽͍͠ཁૉͷੜ੒ DoubleLinkedListࣗମͷઌ಄ͱ چઌ಄ͷཁૉͷྡ઀͢ΔཁૉΛߋ৽

Slide 15

Slide 15 text

ͳͥ࠶࣮૷ #2 • ࣮૷͕ෳࡶʹͳ͍ͬͯͯbyte code size, dex sizeʹѱӨڹ • DCAS, N-word CASͰ࣮૷ • ֦ுੑɺਖ਼֬ੑɺύϑΥʔϚϯεʹ೉͕͋Δ • CASɿCompare And Swap જࡏతͳσʔλڝ߹ͷ໰୊͕ൃੜͨ͠৔߹ͷਪଌͱमਖ਼Λࠔ೉ʹ͍ͯͨ͠

Slide 16

Slide 16 text

ͳͥ࠶࣮૷(Compare And Swap) #2

Slide 17

Slide 17 text

ͳͥ࠶࣮૷(Compare And Swap) #2 Pointerͷٙࣅίʔυ

Slide 18

Slide 18 text

ͳͥ࠶࣮૷(Compare And Swap) #2 Pointerͷ஋ͱPointerʹೖͬͯΔ΂͖஋ΛνΣοΫ w w

Slide 19

Slide 19 text

ͳͥ࠶࣮૷(Compare And Swap) #2 ظ଴Ͳ͓Γͷ஋͕Pointerʹ֨ೲ͞Ε͍ͯͨΒߋ৽

Slide 20

Slide 20 text

ͳͥ࠶࣮૷(D-Compare And Swap) #2

Slide 21

Slide 21 text

ͳͥ࠶࣮૷(D-Compare And Swap) #2 ظ଴Ͳ͓Γͷ஋͕Pointerʹ֨ೲ͞ΕΔ·ͰԿ౓΋CAS

Slide 22

Slide 22 text

ͲͷΑ͏ʹ࠶࣮૷ • σʔλߏ଄͸഑ྻͰ࣮૷ • ΦϒδΣΫτૢ࡞͸Fetch And Addʹมߋ

Slide 23

Slide 23 text

ͲͷΑ͏ʹ࠶࣮૷(Fetch And Add) Pointerʹೖ͍ͬͯͨݹ͍஋ΛҰ࣌อଘͯ͠ॲཧΛ࣮ߦ

Slide 24

Slide 24 text

ͲͷΑ͏ʹ࠶࣮૷(Fetch And Add) Ұ࣌อଘͨ͠ݹ͍஋Λݺͼग़͠ݩʹฦ٫

Slide 25

Slide 25 text

࠶࣮૷ͯ͠Ͳ͏ͳΔ • Ұൠతͳ؀ڥͰ10 ʙ 25%ߴ଎Խ

Slide 26

Slide 26 text

·ͱΊ • 1.7.0ͰChannelࣗମͷ࠶࣮૷͕ͳ͞ΕͯύϑΥʔϚϯε͕޲্ͨ͠ • (Opt)BroadcastChannelܥΛ࡟আ͢Δ४උ͕੔ͬͨ • (Opt)͜ͷ࠶࣮૷ͷ͓͔͛Ͱsemaphore΍mutexपΓͷվળ΋ೖͬͯ ͍Δ

Slide 27

Slide 27 text

͍͞͝ʹ ࢿྉ࡞ͬͯͨΒ1.7.1ϦϦʔε͞Εͨ😂

Slide 28

Slide 28 text

Ҿ༻ • https://github.com/Kotlin/kotlinx.coroutines/releases/tag/1.7.0 • https://github.com/Kotlin/kotlinx.coroutines/issues/3621 • https://github.com/Kotlin/kotlinx.coroutines/pull/3103 • https://arxiv.org/abs/2211.04986