Node面试题

Node的特点有三个:单线程、事件驱动、非阻塞I/O

单线程
像java、PHP等这样的后端语言,都是多线程的,即当有一个请求过来的时候,开启一个CPU,它使计算机能够在同一时间执行多个线程。而node的单线程是指当遇到需要加载数据库、读取磁盘等请求的时候,它会将其放入“队列”中执行,待下一轮事件循环的时候再判断能否执行它的回调函数,若此时它的回调函数需要加载I/O则放入“队列”中,它的特点是线程利用率是100%。

事件驱动
举一个通俗点的例子,你在餐厅吃饭,如果当时店内生意比较好,你坐下来,服务员过来招待你,这时,另一桌也刚坐下并呼叫服务员。正常情况下,服务员肯定会想给你个菜单让你自己看看,看好了再叫他,接着去招呼那一桌的客人了,完了再给你端茶什么的。

这就是事件驱动。通过监听事件的状态变化来做出相应的操作。当你发出一个请求的时候,如果这个请求需要等待,那这个请求便会被放入“队列”中,在处理这个请求的同时,后续的无需请求也在被处理,事件处理结束后,调用请求的回调函数。注:在处理无需等待的事件时,事件循环是暂停的。

非阻塞I/O
阻塞I/O就是当用户发一个读取文件描述符的操作的时候,进程就会被阻塞,直到要读取的数据全部准备好返回给用户。那非阻塞I/O呢,就与上面的情况相反,用户发起一个读取文件描述符操作的时,函数立即返回,不作任何等待,进程继续执行。但是程序如何知道要读取的数据已经准备好了呢?最简单的方法就是轮询,即事件循环。

优点:

  1. 因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
  2. 与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

缺点:

  1. Node是一个相对新的开源项目,所以不太稳定,它总是一直在变。
  2. 缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子(第三方库现在已经很丰富了,所以这个缺点可以说不存在了)。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值