Node.js是什么以及为什么要用它?

Node.js是什么以及为什么要用它?

如果您的英文阅读能力尚可,请看原文
还有这篇Stackoverflow 上的回答

Node.js 是什么

简单地说,Node.js 是使得 JavaScript 能在服务端运行的平台,使得 JavaScript 能像其它的后台语言一样可以操作网络、系统等。

Node.js 是怎么诞生的

Ryan Dahl 认为 I/O 处理地不好,会因为同步执行而阻塞整个进程。
传统的 Web 服务技术是对每一个请求启动一个线程处理。但是大部分时间都花在了等待 I/O 操作完成上,所以需要大量的资源来管理这些线程。因此,服务器的“一个请求一个线程”的方法并不好。
Dahl 认为软件应该能够处理多任务,并建议减少等待 I/O 返回的时间。他认为,处理多个并发连接的正确方法是使用单线程、事件循环和非阻塞 I/O ,而不是使用线程模型。例如,查询数据库的时候,应该给它指定一个回调函数,以便执行后面其他的操作,当结果返回时,执行回调函数。

Node.js 是怎么工作的

Node.js 中有一个重要的机制叫做事件循环,能够让单线程的 JavaScript 执行非阻塞的 I/O 操作。事件循环从代码中获取任务并执行。如果任务是异步的或者是一个 I/O 操作,则事件循环将它交给系统内核执行(例如建立新的连接)或线程池(如与文件系统相关的操作)。然后事件循环将会获取下一个任务去执行。
由于大多数现代的内核是支持多线程的,所以可以在后台同时执行多个操作。当其中的某一个操作完成的时候(这是一个事件),内核将通知 Node.js ,Node.js 会把回调函数添加到轮询队列中,然后被执行。
为适应单线程事件循环,Node.js 使用 libuv 库,而 libuv 又使用固定大小的线程池来并行处理一些非阻塞异步 I/O 操作。主线程调用函数将任务发送到共享任务队列,然后线程池中的线程将执行这些任务。

为什么要用 Node.js

因为 Node.js 中没有直接操作 I/O 的函数,所以进程不会阻塞(I/O 操作交给了系统内核异步执行)。

什么时候用 Node.js

得益于事件循环,单线程和非阻塞 I/O,Node.js 在高强度的 I/O 应用程序中表现最好,这些应用有很多高并发连接,比如视频和音频流、实时应用程序、实时聊天、游戏应用程序、协作工具或股票交易所软件。
Node.js 不适合 CPU 密集型应用,CPU 密集型应用使用传统的线程模型来实现会更佳。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值