NodeJS特点
2019-06-19 本文已影响15人
贝程学院_前端
面试官: 了解Node吗,有什么特点?
回答官网第一句:
image.png面试官: 然后呢?
1. 它的用途决定了它的特性-单线程
1.作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题
- 这也就意味着任务需要排队,也就说明在Node中用户的请求将会排队,形成一个事件队列
举个例子: 事情发生在一个小酒馆,只有一个伙计,陆陆续续的客官来用餐,那么这个伙计,只能一个一个按顺序给客官下单(先进先出)
image.png2. 非阻塞I/O
image.png非阻塞:就是没有堵住呗!!
I/O: 输入输出,(磁盘的读写,数据库的查询,网络通信等)
当访问数据库取数据的时候,需要一段事件,在传统的单线程处理机制中,在执行访问数据库代码时,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,这样就降低了程序的执行效率
Node.js采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放到回调函数中,从而提高了程序的执行效率
当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数,为了处理异步I/O,线程必须有一个事件循环,不断的检查有没有未处理的事件,依次处理
阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程,
非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%
"意淫"一下,一个小二玩命干活,是不是比多个小二闲着好
3. 事件驱动
image.png点菜->做菜->上菜
在Node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(例如:又来客人了),然后返回继续执行原事件的回调函数,这种处理机制,成为"事件环"机制