非非非非非非非非非非非非非非非非 Talk #72 非非非非非非非非非非非非非非 非 非 非
非非非非 非非 非非非 4 非非非非非非非非非非 python 非 web 非非非非非非非非非非非非 swift/kotlin 非非非非非非非非非 非
ひよっ子エンジニアのころ… 非同期処理の壁にぶち当たる 非非非非非非非非 ある処理が完了するのを待たずに、次の処理を実行する方式です。 これにより、ファイル読み込みやネットワーク通信のような時間の かかる処理を行っている間も、他の処理(例えばユーザー操作への 応答)を進めることができ、アプリケーションの応答性を高めます。 一般的な同期処理がタスクを一つずつ順番にこなすのとは対照的です (Geminiによる解説 。 )
つまり…? 時間のかかる処理を複数同時 にやってくれるってことね なるほど、 完全に理解した! (してない)
半年以上ずっと曖昧な理解のまま 新しく入ってきた方に正しく説明 できないことに気づき焦る →非同期処理をちゃんと理解したい!
CPUとは • データの計算や制御を行う頭脳 のような部分 • コアは実際に命令を処理する装 置 • スレッドは同時に処理できる命 令の単位
1コア2スレッドなら… • 同時に実行できるスレッド数は1 スレッドA • 2つのスレッドを高速に切り替え ながら、同時に実行しているよう スレッドB に見せかけている スレッド スレッド スレッド スレッド スレッド A B A B A
並行処理と並列処理 並行処理… 同時に複数の処理が処理中である 人間が行うマルチタスクと同じ 並列処理… 複数の処理を物理的に同時実行する 複数スレッドが別のコアで実行されている
同期処理と非同期処理 同期処理 Thread.sleepを使うと その間はスレッドがブロックされる →Aの処理が終わるまでBの処理 は始まらない taskA taskB
同期処理と非同期処理 非同期処理 delayを使うと その間はスレッドがブロックされない →Aの処理の待ち時間にBの処理 が始まっている delay(1000) taskA delay(1000) taskB taskA taskB
非同期処理だと 何が嬉しいか?
CPUが暇にならない! 処理に待ち時間が発生すると、 CPUは基本的に暇になる →待ち時間中は別の処理をさせるこ とでCPUを遊ばせない
キーワードは 「停止」と「再開」 長い処理なら何でも非同期にす れば良いというわけではない 右のような単純な計算処理だと 並行処理にはならない →API通信など「待ち時間」が発 生するような処理に向く
非同期処理の本質は 「同時実行しているように見せるこ と」ではなく 待ち時間にスレッドをブロックしない ことでCPUを有効活用すること