Node.jsでのsleep(時間制御) | setTimeout vs 同期的なスリープ

Node.jsでsleep(時間制御)を実現する方法は、非同期処理を理解していることが重要です。

Node.jsはシングルスレッドで非同期イベント駆動型のプラットフォームですので、PHPやRubyなどの通常の「sleep」関数のような同期的な一時停止は避けるべきです。

代わりに、非同期コードを使用して適切な遅延を実現する方法があります。

以下に、Node.jsでスリープを実現する2つの一般的な方法を説明します。

setTimeoutによる非同期スリープ

これは非同期のコードを使用して遅延を実現するシンプルな方法です。setTimeout関数を使用して一定時間後にコードを実行するように設定します。

console.log("Start");
setTimeout(() => {
    console.log("After 3 seconds");
}, 3000); // 3000ミリ秒(3秒)後にコードを実行
console.log("End");

ES6以降のNode.jsバージョンを使用している場合、Promiseとasync/awaitを組み合わせて非同期の遅延を実現することができます。

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

(async () => {
    console.log("Start");
    await sleep(3000); // 3000ミリ秒 (3秒間) の遅延
    console.log("After 3 seconds");
    console.log("End");
})();

上記の例では、sleep関数は指定したミリ秒数だけ非同期に待機するPromiseを返します。

実行方法はawait sleep(3000)を使用して3秒間待機し、その後のコードを実行します。

Node.js v16以降から実装された timers/promises モジュールを使用することでも実装が可能です。

const { setTimeout } = require('timers/promises');

(async () => {
    console.log("Start");
    await setTimeout(3000); // 3秒間の遅延
    console.log("After 3 seconds");
    console.log("End");
})();

この方法を使用することで、非同期処理をよりシンプルで読みやすい形で実現できます。また、他のPromiseベースの処理と組み合わせてコードを効果的に管理することができます。

どの方法も、Node.jsの非同期性に合わせた遅延処理の実現方法です。

同期的なスリープ

Node.jsは非同期イベント駆動型のプラットフォームであり、通常は同期的なスリープは推奨されません。

同期的なスリープを行うことは、プログラムのパフォーマンスを低下させる可能性があります。しかし、特定の状況で同期的なスリープが必要な場合があるかもしれません。

以下に、同期的なスリープを実現する例を示します。

function sleepSync(ms) {
    const start = Date.now();
    while (Date.now() - start < ms) {}
}

console.log("Start");
sleepSync(3000); // 3秒間同期的にスリープ
console.log("After 3 seconds");
console.log("End");

このコードは、指定したミリ秒数の間、空のループを実行することでスリープを模倣しています。この方法は他の処理をブロックするため、プロセス全体の処理を停止させます。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA