JavaScriptの同期処理と非同期処理


JavaScriptの同期処理と非同期処理について紹介します。

🍣 同期処理

非同期処理の説明を行う前にまず、同期処理について説明します。同期処理とは、あるタスクが実行されている間、ほかのタスクの処理が中断する方式のことです。

以下はNode.jsでのサンプルプログラムです。

// sync.js
console.log("start");
function sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
console.log("Sleep処理が完了しました");
}
sleep(5000);
console.log("end");

実行結果はこちら。

node sync.js
start
Sleep処理が完了しました
end

🍄 非同期処理

非同期処理は「ある関数が呼び出された時、その終了を待たずに次の処理に進む。時間のかかる処理が終了したら通知する」ような処理です。
何かしらの処理が完了したら、渡したfunctionを実行させる関数を「コールバック関数」と呼びます。

// ansync.js
console.log("start");
var fs = require('fs')
fs.readFile(hoge.txt, "utf-8", function(err, data) {
if(err) throw err;
console.log("ファイルの読み込みが完了しました")
console.log(data);
})
console.log("end");

上記の実行結果は以下。

node ansync.js
start
end
ファイルの読み込みが完了しました
ファイルの中身

end よりも、ファイルの読み込みの処理の後に実行されていることが分かると思います。

ファイルの読み込みの処理をI/O専門のワーカスレッド(バックグラウンドでタスク処理するスレッド)に任せているのがわかります。

🏀 参考リンク

📚 おすすめの書籍