面试题:NodeJS特点

面试官: 了解Node吗,有什么特点?
回答官网第一句:面试题:NodeJS特点_第1张图片
面试官: 然后呢?

1. 它的用途决定了它的特性-单线程

1.作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题

2.这也就意味着任务需要排队,也就说明在Node中用户的请求将会排队,形成一个事件队列

举个例子: 事情发生在一个小酒馆,只有一个伙计,陆陆续续的客官来用餐,那么这个伙计,只能一个一个按顺序给客官下单(先进先出)
面试题:NodeJS特点_第2张图片

2. 非阻塞I/O

非阻塞:就是没有堵住呗!!

I/O: 输入输出,(磁盘的读写,数据库的查询,网络通信等)
面试题:NodeJS特点_第3张图片

当访问数据库取数据的时候,需要一段事件,在传统的单线程处理机制中,在执行访问数据库代码时,
整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,
这样就降低了程序的执行效率

Node.js采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,
把数据库返回结果的处理代码放到回调函数中,从而提高了程序的执行效率

当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数,
为了处理异步I/O,线程必须有一个事件循环,不断的检查有没有未处理的事件,依次处理

阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程,

非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%
"意淫"一下,一个小二玩命干活,是不是比多个小二闲着好

3.事件驱动

点菜->做菜->上菜

面试题:NodeJS特点_第4张图片
在Node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(例如:又来客人了),然后返回继续执行原事件的回调函数,这种处理机制,成为"事件环"机制

你可能感兴趣的:(web前端)