什么是node.js
Node.js简称Node,是一个可以使JavaScript运行在服务器端的开发平台。
(1)Node.js本是一种Web前端语言,Node.js让JavaScript成为服务器端脚本语言。
(2)Node.js将V8引擎封装起来,作为服务器运行平台,以执行JavaScript编写的后端脚本程序。
(3)Node.js是跨平台的,能运行在Windows、macOS和Linux平台上。
(4)Node.js除了自己的标准类库之外,还可使用大量的第三方模块系统来实现代码的分享和重用。
(5)与其他后端脚本语言不同的是,Node.js内置了处理网络请求和响应的函数库,也就是自备了HTTP服务器,所以不需要额外部署HTTP服务器,使用的时候直接导入即可。
为什么要学习node.js
传统意义上的 JavaScript 运行在浏览器上,浏览器内核实际上分为两个部分:渲染引擎和 JavaScript 引擎。前者负责渲染 HTML + CSS,后者则负责运行 JavaScript。Chrome 使用的 JavaScript 引擎是 V8,它的速度非常快。
(1)Node.js 底层就封装了 V8 引擎。Node.js运行时环境包含执行JavaScript程序所需的一切条件,该引擎会将JavaScript代码转换为更快的机器码。
(2)Node.js进一步提升JavaScript的能力,使JavaScript可以访问文件、读取数据库、访问进程,从而胜任后端任务。
(3)使用Node.js的最大优点是开发人员可以在客户端和服务器端编写JavaScript,打通了前后端。
node.js特点
(1)非阻塞I/O
阻塞I/O与非阻塞I/O之间的区别:
- 阻塞I/O是指线程在执行的过程中遇到I/O操作(输入输出)时,操作系统会撤销该线程的CPU控制权,使其暂停执行,处于等待状态,同时将资源转让给其他线程。
- 非阻塞I/O又称异步式I/O,是指当线程遇到I/O操作时,不会以阻塞方式等待I/O操作完成或数据返回,而只是将I/O请求转发给操作系统,继续执行下一条指令。
(2)事件驱动
- 事件驱动以事件为中心,Node.js将每一个任务都当成事件来处理。Node.js在执行过程中会维护一个事件队列,需执行的每个任务都会加入事件队列并提供一个包含处理结果的回调函数。
- 在事件驱动模型中,会生成一个事件循环线程来监听事件,不断地检查是否有未处理的事件。
- Node.js的异步机制是基于事件的,所有磁盘I/O、网络通信、数据库查询事件都以非阻塞的方式请求,返回的结果由事件循环线程来处理
(3)单线程
- Node.js的应用程序是单进程、单线程的,但是通过事件和回调支持并发,性能变得非常高。
- 在阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须使用多线程。
- 在非阻塞模式下,线程不会被I/O操作阻塞,该线程所使用的CPU核心利用率永远是100%,I/O操作以事件的方式通知操作系统。
- Node.js在主线程中维护一个事件队列,当接收到请求后,就将该请求作为一个事件放入该队列中,然后继续接收其他请求。
- Node.js内部通过线程池来完成非阻塞I/O操作,Node.js的单线程是指对JavaScript层面的任务处理是单线程的,而Node.js本身是一个多线程平台。
|