Nodejs定时器

					   Node.js定时器

一、	在Node.js中阻塞I/O
请求和Node.js应用程序做的其他其他工作被放置在事件队列中,事件循环从线程池中提取一个线程并执行处理函数。之后,在无阻塞的情况下 ,在事件循环线程上执行该函数,或在阻塞的情况下在一个单独的线程上执行它。
1、	回调函数将要么发送一个响应,要么在事件队列上安排额外的一步任务。
2、	当阻塞回调完成时,该线程被释放到线程池中

<img src="https://img-blog.csdn.net/20160912232607107?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


二、	定时器
1、超时定时器
超时定时器用于将工作延迟一个特定时间数量。到了一定时间后,执行指定的事件,而定时器消失。
setTimeout(callback,delayMiliseconds,[args]):回调函数callback在delayMiliseconds到期后执行。返回一个定时器对象的ID,在delayMiliseconds到期前的任何时候把ID传递给clearTimeout(timeoutId)来取消超时定时器。

超时定时器实例:
var http = require("http");
var x = 0, y = 0,z = 0;
http.createServer(function(request,response){
	response.writeHead(200,{"Content-Type":"text/html;charset = utf-8"});
	if(request.url !== "/favicon.ico")
	{
		 //超时定时器
		console.time("twoSecond");
		setTimeout(simpleTimeout,2000,"twoSecond");
		console.time("oneSecond");
		setTimeout(simpleTimeout,1000,"oneSecond");
		console.time("fiveSecond");
		setTimeout(simpleTimeout,5000,"fiveSecond");
		console.time("50MilliSecond");
		setTimeout(simpleTimeout,500,"50MilliSecond");
		response.end();
	}
}).listen(8000);
console.log("start running......");

function simpleTimeout(consoleTimer)
{
	console.timeEnd(consoleTimer);
}
<img src="https://img-blog.csdn.net/20160912232614938?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />



2、	时间间隔定时器
时间间隔定时器用于安定器的延迟时间间隔来执行工作。当延迟时间结束时,回调函数被执行,然后再次重新调度为该延迟时间。
setInterval(callback,delayMiliseconds,[args]):回调函数callback在delayMiliseconds间隔到期后执行。返回一个定时器对象的ID,在delayMiliseconds到期前的任何时候把ID传递给clearInterval(intervalId)来取消时间间隔定时器。

		时间间隔定时器实例:
		var http = require("http");
var x = 0, y = 0,z = 0;
http.createServer(function(request,response){
	response.writeHead(200,{"Content-Type":"text/html;charset = utf-8"});
	if(request.url !== "/favicon.ico")
	{
		//时间间隔
		setInterval(updateX,500); //3  8 12、、、
		setInterval(updateY,1000);  //1 4 6、、、
		setInterval(updateZ,2000);  //1 2 3 4 5、、、
	}
}).listen(8000);
console.log("start running......");
 
function displayValue()
{
	console.log("x = %d; y = %d; z = %d",x,y,z);
}
function updateX(){
	x+=1;
}
function updateY(){
	y+=1;
}
function updateZ(){
	z+=1;
	displayValue();
}

<img src="https://img-blog.csdn.net/20160912232623185?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
 

3、	即时定时器
即时定时器用来在I/O事件的回调函数开始执行后,但在任何超时时间后时间间隔事件被执行之前,立刻执行工作。
setImmediate(callback,[args]);
4、	使用nextTick来调度工作
在事件队列上调度工作:
Process.nextTick(callback):在事件循环的下一次循环中运行的工作,在I/O事件被触发之前执行。

实现一系列租的fs调用、即时定时器、nextTick()调用

var http = require("http");
var fs = require("fs");
http.createServer(function(request,response){
	response.writeHead(200,{"Content-Type":"text/html;charset = utf-8"});
	if(request.url !== "/favicon.ico")
	{
		fs.stat("nexttick.js",function(err,stats){
			if(stats)
			{
				console.log("nexttick.js Exists");
			}
		});
		setImmediate(function(){
			console.log("Immediate Timer is 1 Executed");
		});
		setImmediate(function(){
			console.log("Immediate Timer is 2 Executed");
		});
		process.nextTick(function(){
			console.log("Next Tick 1 Executed");
		});
		process.nextTick(function(){
			console.log("Next Tick 2 Executed");
		});
		
		response.end();
	}
}).listen(8000);
console.log("start running......");


运行结果:
D:\nodejs\node>node c8_nexttick.js
start running......
Next Tick 1 Executed
Next Tick 2 Executed
Immediate Timer is 1 Executed
Nexttick.js Exists
Immediate Timer is 2 Executed





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值