node.js 探索之路(概念进阶)

Node.js 核心思想: 非阻塞、单线程 、 事件驱动

1、什么是回调?

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。通俗的说,你打电话订位子,刚好没有位子了,于是你在店员那里留下了你的电话,等有了位子,店员就打了你的电话,然后你接到电话订到了位子。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,有了新的位子叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,订到了位子叫做响应回调事件。

代码:
function buy(some){
console.log('Buy ' + some + ' success');
}
function call(callback,seat){
seat = 'A ' + seat;
callback(seat);
}


call(buy,'seat');

运行结果:Buy A seat success

2、什么是同步/异步?

同步就是执行一个任务,后一个任务等待前一个任务执行完成才会执行,程序的执行顺序与任务的顺序一致,如果有死循环等耗时代码,页面就会被阻塞

异步就是每个任务都有一个或多个回调函数,前一个任务执行后不是执行后一个任务,而是执行回调函数,后面的任务也不是等待前一个任务结束就执行。程序的执行顺序和任务的顺序不是一致的。

代码:

var a = 0;
function cons(){
console.log(a)
}
function plus(){
setTimeout(function(){
a +=1;
},1000)
}
plus();
cons();

运行结果:0

如果把代码修改为:

var a = 0;
function cons(){
console.log(a)
}
function plus(callback){
setTimeout(function(){


a +=1;
callback();
},1000)
}
plus(cons);

运行结果:1

3、什么是单线程/多线程?

单线程在程序执行时,所有的程序路径按照连续顺序拍下来,前面的必须处理好了,后面的才会执行。同理多线程就是多个线程之间并发执行,即进程有多个线程。

什么时候用单线程或者是多线程呢?

单线程处理的优点:同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。

多线程处理可以同时运行多个过程。

对于处理时间短的服务或者启动频率高的要用单线程,相反用多线程! 不论什么时候只要能用单线程就不用多线程,只有在需要响应时间要求比较高的情况下用多线程某次操作允许并发而且该操作有可能阻塞时, 用多线程. 例如SOCKET, 磁盘操作使用多线程编程可以给程序员带来很大的灵活性,同时也使原来需要复杂技巧才能解决的问题变得容易起来。多线程很有用,但当使用线程时,可能会在解决老问题的同时产生新问题。


4、什么是阻塞/非阻塞?

阻塞:前一个程序未执行完就得一直等待
非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行

5、什么是I/O?

文件系统里面 磁盘的写入(in)磁盘的读取(out)

6、什么是事件/事件驱动?

事件:一个触发动作(例如点击按钮)
事件驱动:一个触发动作引起的操作(例如点击按钮后弹出一个对话框)

7、什么是基于事件驱动的回调?

为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回掉函数,这种函数执行的方式叫做事件驱动~这种注册回掉就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作相关,可以看作是基于回调的异步I/O。只不过这种回调在nodejs中是由事件来驱动的

8、什么是事件循环?

事件循环Eventloop,倘若有大量的异步操作,如一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,而从完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环
总而言之,管理大量异步操作的机制叫做事件循环。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值