はじめに
Pythonで個人開発を行なっているのだが特に理解もせずにasyncioを使っていたため、非同期処理とはなんなのだろうと思い調べてみました。
同期処理、非同期処理って何?
※前提としてCPythonベースで話します。
標準のCPythonにはGlobal Interpreter Lock(GIL)というロック機能があり、一つのCPUスレッドしか使えません。そのため、同時に一つのPythonコードしか実行できないため、効率化のために非同期処理が使われます。
同期処理は一つの作業を順番に一つづずこなすこと。非同期処理は、一つの作業の完了を待たずに別の作業を進めると言うイメージ。
家事に例えると
同期処理:洗濯機を回す→洗濯完了→料理を始める→料理完了
非同期処理:洗濯機を回す→料理を始める→料理完了→洗濯完了
のように非同期処理だと同期処理に比べて待ち時間の間に効率よく他の作業を進めることができます。
使用例として、API通信やファイルの読み込み、DBアクセスでよく用いられる技術です。
勘違いしやすい点として非同期処理と並列処理があります。
非同期処理はGILにより、同時に一つのCPUしか使えません。そのため、非同期処理はCPU1つの中で、タスクを細かく分割し順番に処理(1→2→1→2→1→2)することを表します。
それに対し、並列処理は二つのCPUが使えます。そのためそれぞれのCPUスレッドに一つずつコードを実行させ、二つの処理を同時に処理することが可能です。
最後に
非同期処理の事を調べていたつもりが、なぜか並列処理のことをより深掘りしてしまった。2025/10月頃からPythonでも本格的にGLIをとっぱらい並列処理を可能にする動きがあるため、より設計が大事になってくるなと感じた。また、非同期処理は、1スレッドの強さが大事だが、並列処理の場合はそこまでスレッドパワーで処理速度が変わらないので並列処理、最近のCPU事情的にも、スレッドの力より数を増やすことに重きを置かれているため、並列処理に適用する必要がありそうだ。(話逸れすぎ)