NodeJS 程序生命周期
Node.js 是一个 JavaScript 运行时,它建立在 Chrome 的 V8 JavaScript 引擎之上,它的运行时环境包括我们执行用 JavaScript 编写的程序所需的一切。它使用事件驱动的非阻塞 I/O 模型,使其最具可扩展性和流行性。非阻塞只是意味着可以并行处理多个请求。
Node.js 程序的生命周期:要了解它的生命周期,您必须熟悉事件循环。事件循环使您的任务非常快,并且它还执行多任务处理。它允许 Node.js 执行非阻塞 I/O 操作。您可以在此处了解有关事件循环的更多信息。当您使用 node app.js 运行节点文件时,脚本开始执行。它将被解析器解析成机器语言,这意味着所有的函数和变量都注册在一个内存位置。解析代码后,我们的程序到达了它不会退出的地步,并且将运行一个无限的 no。由于事件循环,所有时间都是可能的。一旦事件循环开始执行,只要注册了事件监听器,它就会运行。
示例:您拥有数据库,并且必须从数据库中访问数据,或者您想向数据库中插入一些内容,该数据库只需要调用一些函数,因此当您调用它们时会花费一些时间(可能是纳秒或微秒,但这将需要一些时间)所以不可能每个请求我们都可以等待那个特定的时间,然后我们继续下一个请求,这就是事件循环出现的地方。您的数据库部分将在后台运行,并且事件循环将连续运行,以便它也可以处理对另一个请求的需求。这将在 node.js 中的单个线程上完成。您也可以使用process.exit()显式退出循环。
Javascript
const http = require('http');
const server = http.createServer(function (req, res) {
console.log("server is running");
process.exit();
});
server.listen(8000);
Javascript
let str = 'GeeksforGeeks!';
setTimeout(function () {
return console.log(str);
}, 5000);
// This console log is executed right away
console.log('Executing setTimeout() method');
Javascript
let str = 'GeeksforGeeks!';
setImmediate(function () {
return console.log(str);
});
// This console log is executed right away
console.log('Executing setImmediate() method');
Javascript
let str = 'GeeksforGeeks!';
setInterval(function() {
return console.log(str);
}, 5000);
// This console log is executed right away
console.log('Executing setInterval() method');
说明:在上面的createServer() 方法中的程序中,您已经编写了简单的 process..exit() ,因此一旦您使用 node app 运行该程序,您的服务器将等待侦听您的请求,一旦您提供它它将退出事件循环的请求。通过调用这个函数,Node.js 将强制当前正在运行的进程尽快中止,如果有任何异步操作发生,它们也将立即终止。
计时器: Node.js 中的计时器模块由有助于控制代码执行时间的函数组成。它包括 setTimeout()、setImmediate() 和 setInterval() 方法。
- setTimeout() 方法: setTimeout() 方法用于在指定的毫秒数后安排代码执行。指定的函数将执行一次。我们可以使用 clearTimeout() 方法来阻止函数运行。 setTimeout() 方法返回可在 clearTimeout() 方法中使用的 ID。
Javascript
let str = 'GeeksforGeeks!'; setTimeout(function () { return console.log(str); }, 5000); // This console log is executed right away console.log('Executing setTimeout() method');
- setImmediate() 方法: setImmediate() 方法用于在当前事件循环周期结束时执行代码。作为 setImmediate() 参数传递的任何函数都是可以在事件循环的下一次迭代中执行的回调。
Javascript
let str = 'GeeksforGeeks!'; setImmediate(function () { return console.log(str); }); // This console log is executed right away console.log('Executing setImmediate() method');
- setInterval() 方法: setInterval() 方法用于以指定的时间间隔(以毫秒为单位)调用函数。它用于在指定时间段后仅执行一次函数。
我们可以使用 clearInterval() 方法来阻止函数运行。 setInterval() 方法返回可在 clearInterval() 方法中使用的 ID。Javascript
let str = 'GeeksforGeeks!'; setInterval(function() { return console.log(str); }, 5000); // This console log is executed right away console.log('Executing setInterval() method');
在此处了解有关 Node.js 中计时器的更多信息。
process.nextTick(callback) 方法:每当初始化一个新的操作队列时,我们可以将其视为一个新的滴答声。 process.nextTick() 方法将回调函数添加到下一个事件队列的开头。需要注意的是,在程序开始时,在处理事件循环之前第一次调用 process.nextTick() 方法。
timers–>pending callbacks–>idle,prepare–>connections(poll,data,etc)–>check–>close callbacks