[JS] 初学者に向けた 同期 / 非同期処理 の例え話
[JS] 初学者に向けた 同期 / 非同期処理 の例え話:
ここでは例として、
1. お風呂に入る
2. 洗濯機を回す
3. 洗濯物を干す
という処理を考えてみましょう。
すると、同期処理・非同期処理は下記のように表現することができます。
同期処理はつまり、上から順番に処理を実行していきます。今回の例で説明すると、洗濯機を回す処理を開始したら、洗濯機が停止するまで何もしてはいけません。書かれている順番に処理が実行される、というプログラムの原則に則った書き方ですね。
さて、ここで注目して欲しいのは、各処理の主語です。書き出してましょう。
お風呂に入るのは? -> 私
洗濯をするのは? -> 洗濯機
洗濯物を干すのは? -> 私
つまり、洗濯機が頑張って洗濯物を洗ってくれている間、私というリソースが使用されずに放置されてしまうことになってしまいます。
ここで登場するのが非同期処理です。つまり、洗濯機が頑張って洗濯してくれている間にお風呂に入ってしまうのです。
洗濯が終わり、洗濯機が「ピーッピーッ」と終わった合図を出してくれてたら洗濯物を干す...という戦略です。
すると、リソースを無駄にすることなく行動、つまり処理を進めることができますよね。
同期処理 / 非同期処理 とは
ここでは例として、1. お風呂に入る
2. 洗濯機を回す
3. 洗濯物を干す
という処理を考えてみましょう。
すると、同期処理・非同期処理は下記のように表現することができます。
同期処理とは
同期処理はつまり、上から順番に処理を実行していきます。今回の例で説明すると、洗濯機を回す処理を開始したら、洗濯機が停止するまで何もしてはいけません。書かれている順番に処理が実行される、というプログラムの原則に則った書き方ですね。さて、ここで注目して欲しいのは、各処理の主語です。書き出してましょう。
お風呂に入るのは? -> 私
洗濯をするのは? -> 洗濯機
洗濯物を干すのは? -> 私
つまり、洗濯機が頑張って洗濯物を洗ってくれている間、私というリソースが使用されずに放置されてしまうことになってしまいます。
非同期処理とは
ここで登場するのが非同期処理です。つまり、洗濯機が頑張って洗濯してくれている間にお風呂に入ってしまうのです。洗濯が終わり、洗濯機が「ピーッピーッ」と終わった合図を出してくれてたら洗濯物を干す...という戦略です。
すると、リソースを無駄にすることなく行動、つまり処理を進めることができますよね。
JavaScriptに落とし込むと
- 私
- JavaScript自体の処理
- 洗濯機
- 外部リソースとの連携作業
- サーバーサイド処理、ファイル読み込み、Ajax処理... etc.
- 外部リソースとの連携作業
コメント
コメントを投稿