非同期処理と同期処理は、プログラムの実行の仕方や順序における2つの主要なアプローチです。
それぞれの特性を以下に説明します。
同期処理 (Synchronous)
-
一つずつ順番に実行: 同期処理では、コードは上から下へと一つずつ、順番に実行されます。
-
待機: もし途中の操作が時間がかかるもの(例えば、大量のデータを処理する操作)であった場合、その操作が完了するまで次の操作は待機されます。
-
ブロック: 上記の待機のため、時間がかかる操作中はアプリケーション全体が「ブロック」され、他の操作を受け付けないことがあります。
非同期処理 (Asynchronous)
-
同時に複数の操作: 非同期処理では、一つの操作が完了を待たずに次の操作が始まることができます。
-
コールバックやPromise: 非同期の操作が完了したら、コールバック関数を実行したり、Promiseが解決または拒否されることで、その結果を取り扱うことが一般的です。
-
非ブロッキング: 非同期処理はアプリケーションを「ブロック」しないので、例えばネットワークリクエストを待っている間もユーザーインターフェースは反応し続けることができます。
例
同期的な例:
const result = database.fetchData();
console.log(result);
console.log("Finished");
上記の場合、fetchData
の処理が終わるまで、次のconsole.log
の実行が待たれるため、データ取得に時間がかかると"Finished"の出力も遅れます。
非同期的な例:
database.fetchDataAsync((result) => {
console.log(result);
});
console.log("Finished");
上記の場合、非同期のfetchDataAsync
が即座に返し、"Finished"が先に出力される可能性があります。
データの取得が完了したら、コールバック関数が実行されて結果が出力されます。
結論
同期処理は順番に一つずつ処理が行われ、一つの処理が終わるまで次の処理は待たされます。
一方、非同期処理では、一つの処理が終わるのを待たずに次の処理が進行し、結果や完了の通知は後からコールバックやPromiseを使って取り扱われます。
その他わかりやすかった記事:非同期処理とは何か、何が嬉しいの?