プログラミングの「待ち時間」問題
あなたがスマホでアプリを使っている時、こんな経験はありませんか?
- 写真をアップロード中でも、他の投稿を見られる
- 動画を読み込み中でも、コメントが書ける
- メッセージを送信中でも、画面がスクロールできる
これ、実は「非同期処理」という技術のおかげなんです。
非同期処理って何?
**非同期処理とは、「待たずに次の作業を進められる仕組み」**のことです。
レストランで例えてみよう
同期処理(待つやり方)
あなたがレストランの店員だとします。
- お客さんAの注文を受ける
- 厨房に伝える
- 料理ができるまでじっと待つ(他のことは何もしない)
- できた料理を運ぶ
- やっとお客さんBの注文を聞きに行く
これだと、めちゃくちゃ時間がかかりますよね?お客さんBは「まだ注文聞いてくれないの?」とイライラします。
非同期処理(待たないやり方)
- お客さんAの注文を受ける
- 厨房に伝える
- 待たずにお客さんBの注文を聞きに行く
- さらにお客さんCの注文も聞く
- 料理ができたら運ぶ
複数のことを同時進行できるので、効率的ですよね!
プログラミングではどう使う?
例1:画像をダウンロードする
同期処理だと...
画像1をダウンロード(5秒待つ)
↓
画像2をダウンロード(5秒待つ)
↓
画像3をダウンロード(5秒待つ)
= 合計15秒
非同期処理だと...
画像1、2、3を同時にダウンロード開始
↓
一番速いものから順に表示
= 約5秒で完了!
例2:SNSアプリ
あなたがInstagramで投稿を見ている時:
- 写真を読み込み中(3秒かかる)
- でも待たずに次の投稿にスクロールできる
- コメントも書ける
- いいねもできる
もし同期処理だったら、1枚の写真が読み込まれるまで画面が固まって、何もできません。最悪ですよね?
非同期処理が活躍する場面
1. インターネット通信
- サーバーからデータを取得する
- メッセージを送信する
- 天気予報を取得する
なぜ? インターネット通信は時間がかかるから。待っている間に他のことをしたい。
2. ファイルの読み書き
- 大きな動画ファイルを保存
- 写真を読み込む
なぜ? ファイル操作も時間がかかる。
3. タイマー機能
- 3秒後に通知を表示
- 1分ごとに時刻を更新
なぜ? 待っている間、アプリを止めたくない。
身近な例で理解しよう
学校の掃除当番
同期処理(非効率):
- 太郎:黒板を消す(みんな待つ)
- 花子:机を運ぶ(みんな待つ)
- 次郎:ほうきで掃く(みんな待つ)
非同期処理(効率的):
- 太郎:黒板を消す
- 花子:同時に机を運ぶ
- 次郎:同時にほうきで掃く
→ 作業時間が3分の1に!
メリットとデメリット
メリット
✅ 速く感じる
待ち時間が減るので、アプリがサクサク動く
✅ 画面が固まらない
処理中でも他の操作ができる
✅ 効率的
同時に複数の作業を進められる
デメリット
❌ プログラムが複雑になる
「どの作業がいつ終わるか」を管理するのが大変
❌ バグが起きやすい
タイミングのズレでエラーが出ることも
プログラミングでの書き方
JavaScriptでの例を見てみましょう。
昔の書き方
// 3秒後にメッセージを表示
setTimeout(function() {
console.log("3秒経ちました!");
}, 3000);
console.log("すぐ表示される");
表示順:
- "すぐ表示される"
- (3秒待つ)
- "3秒経ちました!"
今の書き方(async/await)
async function getWeather() {
console.log("天気を取得中...");
const data = await fetch("天気API");
console.log("今日は晴れです!");
}
awaitがあると「ここで待つ」という意味になります。
まとめ
非同期処理は、**「待たずに次の作業を進められる魔法の仕組み」**です。
- スマホアプリがサクサク動くのも
- 動画を見ながらコメントできるのも
- ゲームがカクつかないのも
ぜんぶ非同期処理のおかげ!
プログラミングを学ぶなら、絶対に知っておきたい重要な概念です。最初は難しく感じるかもしれませんが、「複数のことを同時進行する」というイメージを持っておけば大丈夫。
あなたが毎日使っているアプリの裏側では、この非同期処理がフル活用されているんですよ!
もっと知りたい人へ
- Promise(約束)という仕組み
- async/awaitの詳しい使い方
- コールバック関数との違い
これらを学ぶと、さらに理解が深まります!