深刻浅出node(1) Node简介

这一系列主要是本身在学习深刻浅出node.js这本书的学习笔试,部分加入了本身的一些理解 分享给一块儿学习node的小伙伴 本身仍是个初学者 有不少地方理解的不到位 一块儿交流javascript

  一 什么是nodejava

    1.1 对比node chromenode

  二 node的特色web

    2.1 异步I/Ochrome

    2.2 事件驱动编程

    2.3 单线程后端

  三 node的使用场景    promise

 一)什么是node浏览器

  node是一种单线程,单进程的系统,它具备事件驱动,非阻塞I/O的特性,经过node这个基础框架咱们能实现多种应用(web服务器 桌面应用 命令行工具等) node在实现上将chrome的V8引擎移动到后端,充分利用的V8的事件驱动,来构造应用.服务器

  1.1 对比node chrome  在浏览器中中经过事件驱动服务界面  在node经过事件驱动服务I/O

二)node的特色  

  2.1 异步I/O 异步是对比同步来理解的,而且在实现异步I/O的基础上是结合事件驱动来实现的 简单的图理解事件驱动

简单的理解异步I/O 就是咱们没必要关注请求完成的时间,发起调用后会自动的执行后面的调用,事件监听器会调用设置的回调函数(存在数据的话,会做为参数传入),来达到异步I/O

这就涉及到 完成A B 任务的问题  假设A B任务不相关  在同步的模式下   任务完成的时间取决于 time(A) + time(B)  在异步的模式下   任务完成的时间取决于 max(time(A),time(B)) 这样任务不只能并行的处理,也存在提高效率的可能.

  2.2 事件驱动

    事件驱动的编程模型具备轻量级,松耦合,只关注业务点等优点,但在多个异步任务的场景下下,事件与事件之间如何协同合做(回调的嵌套)是一个问题(promise)

  2.3 单线程? 

    在浏览器中javascript和用户界面的UI是共享一个线程的,也就是当js长时间的执行的时候,页面会被锁死,在node中也保持了js单线程这个特色,其实这个单线程的概念能够理解为不管是浏览器仍是node中只存在一个主线程,在主线程运行的事件循环的逻辑,事件监听器,在浏览器中咱们能够经过web workers来经过事件与主线程通讯,在node中能够经过child_process来与主线程通讯

单线程存在着下面的几个问题

  • 没法利用多核CPU
  • 错误会引起整个应用退出,应用的健壮性考虑(作好错误的处理)
  • 大量的计算占用CPU致使没法继续调用异步I/O(浏览器中js长期执行锁死页面)

三) node的使用场景

  经过上面的分析node很是的适合I/O密集型的应用,可是V8引擎的性能也是不错的,它在CPU密集型的应用上的表现也是不错的,咱们能够将CPU密集任务分配给子线程进行计算,或者对任务进行切分(将大块的任务切分红小的任务防止对CPU的长期占用 一个任务若是长期的占用CPU咱们就要考虑他的场景了),也就是像书中写的CPU密集型任务并不可怕,合理的调度才是关键

相关文章
相关标签/搜索