並列処理と非同期処理の徹底マニュアル
1. なぜ並列処理を扱うのか?
プログラミングの学習が進み、実務や個人の請負開発、個人アプリ開発を行う段階になると、外部APIとの通信を扱うことがあると思います。API処理はうまく扱うと、一度にさまざまな処理を行うことができます。ここで登場するのが、並列処理と非同期処理です。
ここを理解できれば、一気に実務レベルまでプログラムスキルを向上させることができます。
2. 並列処理?非同期処理?
まずは定義を解説します。
並列処理
この処理は、並列して処理を行うことができます。例えば、X(旧Twitter)を見てください。
新しいツイートを読み込みたい時に、下にスワイプします。その間にプログレスサークル(クルクル歯車)が上部に表示されたあと新しいツイートが一気にバッと表示されます。
まさしくこれが、並列処理です。
①下にスワイプ
②ツイートの読み込み & プログレスサークルの表示
③プログレスサークルの非表示
④新しいツイートの表示
今回の例では、②が並列処理で外部APIとの通信とプログレスサークルの表示処理が実行されています。
非同期処理
アプリが実行されている環境に依存する処理を同期処理、反対にアプリとは違った外部に依存処理を非同期処理といいます。
詳しく見ると、アプリを開発する際に、プログレスサークル(読み込みの際にクルクルするやつ)を表示しようぜ!という処理は、そのアプリ内で記述します。何をきっかけで表示して、どんな条件で非表示にするのか。さらに表示時間もアプリ開発者が指定できます。
反対に、APIとの通信の場合、リクエストを投げた後に、APIからいつその応答が返ってくるのかさっぱり時間が読めません。
APIがあるサーバ(デプロイされているサーバ)の混み具合によっては、相当な時間がかかるかもしれないし、逆にサーバーが増強されると応答が早くなるかもしれません。つまりアプリの開発者はこの応答時間を制御することができません。このように、外部に依存する処理は非同期処理です。
Twitterの例では、「ツイートを読み込む処理」はTwitter社のAPIと通信しているので、非同期処理。
プログレスサークル表示処理は同期処理です。
3. なぜ並列処理と非同期処理をセットで解説しているの?
こちらが本題です。
なぜこの二つがセットなのかというと、並列処理を使って非同期処理をしている間に同期処理を行う実装をすることが多いからです。
どういうことか?
API通信(非同期処理)はいつその処理が終わるかわかりません。その間ただ待っているだけでは、あまりにも効率が悪いです。
待ち合わせの際に30分ほど待たされると、その間にポイ活でもしておいた方が時間を無駄にしないですよね? それと同じです。
待ち合わせをしている時にこそ、並列で処理を行なってしましましょう!
ちなみに、複数の人と待ち合わせをする(複数のAPIと非同期処理をする)ことも可能です。
API通信の応答を待っている間に、プログレスサークル表示させたり、他のファイルからデータを取り込む処理をしたり、はたまた他のAPI通信を投げてみたり、と時間を有効に使います。
4. おわりに
いかがでしたでしょうか?おそらく実務レベルに到達する際、はじめに躓く点かと思います。
数年前の私も同じでしたので、安心してください。
具体的な実装は他の記事に記載しますので、そちら参考にしてみてください!
ありがとうございました!