这一系列主要是本身在学习深刻浅出node.js这本书的学习笔试,部分加入了本身的一些理解 分享给一块儿学习node的小伙伴 本身仍是个初学者 有不少地方理解的不到位 一块儿交流javascript
一 什么是nodejava
二 node的特色web
2.1 异步I/Ochrome
2.2 事件驱动编程
2.3 单线程后端
三 node的使用场景 promise
node是一种单线程,单进程的系统,它具备事件驱动,非阻塞I/O的特性,经过node这个基础框架咱们能实现多种应用(web服务器 桌面应用 命令行工具等) node在实现上将chrome的V8引擎移动到后端,充分利用的V8的事件驱动,来构造应用.服务器
1.1 对比node chrome 在浏览器中中经过事件驱动服务界面 在node经过事件驱动服务I/O
2.1 异步I/O 异步是对比同步来理解的,而且在实现异步I/O的基础上是结合事件驱动来实现的 简单的图理解事件驱动
简单的理解异步I/O 就是咱们没必要关注请求完成的时间,发起调用后会自动的执行后面的调用,事件监听器会调用设置的回调函数(存在数据的话,会做为参数传入),来达到异步I/O
这就涉及到 完成A B 任务的问题 假设A B任务不相关 在同步的模式下 任务完成的时间取决于 time(A) + time(B) 在异步的模式下 任务完成的时间取决于 max(time(A),time(B)) 这样任务不只能并行的处理,也存在提高效率的可能.
事件驱动的编程模型具备轻量级,松耦合,只关注业务点等优点,但在多个异步任务的场景下下,事件与事件之间如何协同合做(回调的嵌套)是一个问题(promise)
在浏览器中javascript和用户界面的UI是共享一个线程的,也就是当js长时间的执行的时候,页面会被锁死,在node中也保持了js单线程这个特色,其实这个单线程的概念能够理解为不管是浏览器仍是node中只存在一个主线程,在主线程运行的事件循环的逻辑,事件监听器,在浏览器中咱们能够经过web workers来经过事件与主线程通讯,在node中能够经过child_process来与主线程通讯
单线程存在着下面的几个问题
经过上面的分析node很是的适合I/O密集型的应用,可是V8引擎的性能也是不错的,它在CPU密集型的应用上的表现也是不错的,咱们能够将CPU密集任务分配给子线程进行计算,或者对任务进行切分(将大块的任务切分红小的任务防止对CPU的长期占用 一个任务若是长期的占用CPU咱们就要考虑他的场景了),也就是像书中写的CPU密集型任务并不可怕,合理的调度才是关键