它是一个基于谷歌浏览器v8引擎设计的单线程的基于事件驱动的非阻塞I/O模型的一个js运行环境。
单线程
node.js的线程是单线程的,我们编写代码时的那个线程,通过V8引擎运行代码,代码按前后顺序依次执行,但是Node.js提供了异步函数能够实现多线程执行任务,异步函数的实现是基于底层c/c++写的程序。
非阻塞I/O模型
I/O 操作,如读写文件、输入输出、请求响应等等,它是非常耗时的。在很早以前如果你要读一个文件,整个线程都暂停下来,等待文件读完后继续执行。
非阻塞式I/O是指:应用程序通知操作系统内核发起I/O操作后,不需要等待I/O操作结果,可以直接后续代码执行,让计算机的多核发挥功能 同时执行任务,极大地提升了程序的效率。
事件驱动
它的实现是利用回调函数,当程序执行时,将异步任务添加到事件池(event loop)中,会注册这些事件,让异步任务在子线程中执行,事件池中会循环检测这些事件,检测到事件执行完毕时就回到主线程执行回调函数。
模块化
Node.js的开发是基于模块化的思想,将各种功能集成到各种模块中。
这样做的优点:方便扩展和维护,更有利于开发大型项目。
Node.js是2008发布,在2010年开始火起来,到现在Node.js已经成为前端工程师的一个必备技能,通过它前端工程师可以一个人完成前端和后端的制作。
我要明白Node.js是由Chrome的v8和底层c/c++编写的程序组成,2008年谷歌发布v8引擎,Ryan(Node.js创始人)直接把v8用c++封装了,即终于可以通过js代码编写服务器。
我们用JavaScript编写服务器,js代码在上层的v8运行,调用底层的c/c++编写的函数构建服务器。
而且它是一个开源的免费的js代码运行环境,性能好速度快 资源占用小。