node.js是什么
node.js是JavaScript的运行时环境。node.js由两部分组成,V8 JavaScript运行引擎和Libuv。
html,css,js代码可以运行在浏览器环境中,js还可以运行在node.js环境中。
V8 JavaScript运行引擎是用来解析JavaScript语法,它会编译和执行JavaScript代码。V8 能够将 JavaScript 代码编译成机器码,这样编译好的机器码才可以在计算机上执行。Libuv的主要作用是给node.js赋予异步I/O(异步I/O是对磁盘文件读写等操作)和事件循环两个能力。
浏览器可以操作DOM和BOM以及浏览器的事件循环并不是因为V8 JavaScript运行引擎,V8 JavaScript运行引擎只是编译和执行JavaScript代码,这些能力都是浏览器环境所注入的。同理,node.js的异步I/O和事件循环式Libuv这个异步 I/O 的多平台支持库所提供。
对于任何事件循环是环境所赋予的能力,脱离了环境就谈不上事件循环。每个系统的事件循环都是不同的,比如windows系统和Linux系统。
node.js的特点
1.模块化:node.js的开发是模块化开发的思想,将具有一些相同功能的代码封装为一个模块,方便扩展和维护管理,更有利于开发大型项目。
模块主要是由node.js系统自带的模块和第三方模块以及自定义模块组成,第三方模块几乎都是由npm来管理,npm是一个集成了当前世界上最多开源库的生态系统。
2.基于事件驱动:回调函数是事件驱动的具体实现。把任务添加到事件循环池(event-loop)中让异步任务去子线程中执行,给异步任务注册一个事件,当任务执行完毕以后就回到主线程执行回调函数。
3.非阻塞I/O操作模型: I/O操作是耗时操作,让计算机的多核发挥功能同时执行任务就是异步非阻塞I/O。底层c/c++是多线程,为上层js提供异步编程接口就可以实现CPU多核处理的优势
4.单线程:node.js的主线程是上层js业务代码它是单线程语言,运行js语言是V8 JavaScript引擎。
node.js为何是单线程还可以I/O不阻塞?
node.js的主线程是上层js业务代码它是单线程语言,运行js语言是V8 JavaScript引擎。node.js提供的异步函数是底层c/c++语言实现的,c/c++是多线程为上层js提供异步编程接口就可以实现I/O不阻塞。
node.js开发服务器的特点
node.js是一个开源的免费的环境,性能好速度快,资源占用小,但它不安全。