Nodejs-异步操做

1.阻塞javascript

console.time('main');//代码计时器
//不断循环阻塞了代码的执行
for(var i=0;i<10000000;i++){

}
console.timeEnd('main');
console.log("完成执行了");

2.错误优先的回调函数(针对异步操做)java

   异步回调函数的设计ajax

    (1)回调函数必定做为最后一个参数出现chrome

      funtion foo1(name,age,callback){} 多线程

      funtion foo2(value,callback1,callback2){} 异步

    (2)回调函数的第一个参数默接受错误信息,第二个参数才是真正的回调数据(便于外界获取调用的错误状况)async

      callback(null,data);第一个参数通常设置为错误的对象,第二个参数才是真正的数据,null就是没有错误函数

      为何要把回调函数多加一个参数呢?性能

      由于在程序执行过程当中,有可能出现错误,出现错误要让外界知道,采用的方式就是以参数形式传递(由于异步的时候,是没法经过try catch捕获异常,出了错误,外界是无法知道的)spa

      约定将错误信息做为回调的第一个参数,为上一步的错误信息

function isEventOrOdd(number,callback){
	if(typeof number==='number'){
		if(number%2){
			callback(null,'当前传入的是奇数');
		}else{
			callback(null,'当前传入的是偶数');
		}

	}
	else{
			callback(new Error('你传入的不是数字'));
		}
}

isEventOrOdd(10,(error,data)=>{
	if(error) throw error;
	console.log(data);
});

isEventOrOdd(11,(error,data)=>{
	if(error) throw error;
	console.log(data);
});
isEventOrOdd('asda',(error,data)=>{
	if(error) throw error;
	console.log(data);
});

运行结果:

3.异步

  setTimeout()

  $.ajax()

  文件操做

  Node全部的会发生阻塞的操做都是异步的

 

4.

  Node采用chrome V8引擎处理JavaScript脚本,V8最大的特色就是单线程运行,一次只能运行一个任务

  Node大量采用异步操做(asynchronous operation),即任务不是立刻执行,而是插在任务队列尾部,等到前面的任务运行完以后再执行

  提升代码的响应能力

  多线程的缺点:

  (1)建立线程耗费资源

  (2)线程数量有限

  (3)CPU在不一样线程之间转换,有个上下文转换,这个转换很是耗时间

  Node最大的性能优点,就是单线程

相关文章
相关标签/搜索