ぜのぜ

しりとりしようぜのぜのぜのぜ

62日目

Concurrency

Asynchronous code(非同期なコード)は途中で実行が止められたり,後で再開されたりするが,一度に実行されるコードは一つだけである.Parallel code(並列なコード)は同時に複数のコードが実行される.Concurrencyの章ではこれらのコードの組み合わせをconcurrencyと呼ぶ. Swiftはconcurrentなコードを書ける機能を言語レベルでサポートしている.

ということで今日からConcurrencyの章に入っていく.この前のWWDCでの目玉の一つなので楽しみ.

Asynchronousな関数

引数のリストの後,throwsの前にasyncと書くとその関数がasynchronousであると示せる.その関数を呼ぶときはasyncをつける. めんどくさいのでこれ以降はasynchronousな-asyncな-と書く.

synchronous vs asynchronous

呼んだ関数がasyncであろうとなかろうと,結局その関数の実行が終わるまで次の行は実行されない.ただ,asyncな関数の場合はその関数内の処理がsuspendされたときに他の(この章でいう)concurrentなコードが実行される.このとき,Swiftがasyncな関数を呼んだスレッドをsuspendして別のスレッドにあるコードを実行することから,yielding the threadとも呼ばれるらしい.

let result = await asyncFunc()
print(result)
let result = nonAsyncFunc()
print(result)

asyncな関数を呼べる箇所は以下の3つに限られる

  • asyncな関数,メソッド,プロパティ
  • @mainがついたstructure, class, enumerationのstatic main()
  • detached child task

そういえばXcode 12.xなので書けない…??