143
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WWDC 2021のSwiftの並行処理関連のセッション一覧

Last updated at Posted at 2021-06-08

WWDC 2021 が始まりました。 今年は Swift 5.5 で並行処理の大型アップデートが予定 されており、長年待ち望まれていた async/await に加えて、さらに先進的な Structured Concurrency や Actor なども導入されます。そのため、 WWDC 2021 では並行処理関連のセッションが多数予定されています。

そこで、セッション一覧から並行処理関連のものを探して一覧にしてみました。内容はまだわかりませんが、個人的に重要度が高そうだと思う順に並べてみました。各セッション下部のリンクは内容に関係しそうな Proposal です。 (感想) は実際にそのセッションを見た感想です。

もし抜け漏れなどあればコメント下さい🙇

What‘s new in Swift

これは並行処理についてのセッションではないですが、 Swift 5.5 での新機能の大きな割合を並行処理関連のものが占めているので、最初にこれを見ることで全体を見渡すことができると思います。

(感想) Swift Evolution の Proposal のまとめだけでなく、 Swift 関連のニュース(たとえば Swift Collections や Swift Algorithms のようなライブラリ)の網羅的なダイジェストになっていてとても良かったです。各項目の詳細は他のセッションに橋渡しされており、並行処理関連でも本記事で次に挙げている三つのセッションが紹介されていました。まずはこれを見て全体像を掴むと良いと思います。

Meet async/await in Swift

(感想) async/await の基本的な使い方から、 Continuation 、同期・非同期処理のブリッジまで、 async/await の実用に求められることが詰まっていました。 Structured Concurrency や Actor の前提知識としても、まずはこれを見るのが良いと思います。ただし、 async { }Task { } に変更予定なので要注意です1

Explore structured concurrency in Swift

(感想) Swift の並行処理では async/await や Actor が目立ってますが、僕が一番重要だと思うのがこの Structured Concurrency です。キャンセルの仕組みなんて感動的ですね。このセッションは Structured Concurrency をわかりやすく説明していて、初めて学ぶ人に最適だと思います。

一つだけ付け加えるとすると、 Proposal に書かれていた次の説明です。

a task is to asynchronous functions, what a thread is to synchronous functions

async な)非同期関数にとっての Task は、( asyncない )同期関数にとってのスレッドのようなものだということですが、これはとても本質的な話だと思います。

同期関数では、その関数の処理は最初から最後まで必ず同じ一つのスレッド上で実行されます。関数の処理が実行されている間はスレッドは専有されていて、一つのスレッド上で複数の処理が並行して実行されることはありません。同様に、非同期関数は最初から最後まで一つの Task 上で実行されます。 await の前後でスレッドが異なることはありますが、それでも必ず同一の Task 上で実行されます。また、一つの Task が複数の処理を並行して実行することはありません。

実際に処理を並行に実行する仕組みであるスレッドと比べて初見ではなかなかとらえどころのない Task ですが、僕はこの説明が一番しっくりきました。

Protect mutable state with Swift actors

(感想) Actor すごすぎです。

iOS アプリ開発で一番よく使うのは @MainActor になるんじゃないかと思いますが、 @MainActorGlobal Actor の一種で、 @MainActor のような Actor を自作できるようになる予定です。まだ詳しく Proposal を読めてませんが、たとえば OpenGL を使うときに GL の処理を全部キューに投げて GL スレッドで行うための @GLActor なんかを自作したりできるのかなと想像しています。

Meet AsyncSequence

(感想) AsyncSequence はとてもおもしろくて、 Combine を置き換えてしまう可能性があります。 operator を駆使して Publisher の変換や合成をがんばらなくても、 AsyncSequence を使えばただの for 文で平易に書き下すことが可能になります。個人的には AsyncSequence でもキャンセルが Task を利用して実現されることに、 Structured Concurrency のすごさを実感しました。めちゃくちゃよくできてますね。

Swift concurrency: Behind the scenes

Swift concurrency: Update a sample app

Use async/await with URLSession

Discover concurrency in SwiftUI

Bring Core Data concurrency to Swift and SwiftUI

  1. https://forums.swift.org/t/swift-concurrency-feedback-wanted/49336, https://discord.com/channels/291054398077927425/291054454793306112/851983218789318658@shiz さん、情報ありがとうございました)

143
78
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
143
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?