这一系列主要是自己在学习深入浅出node.js这本书的学习笔试,部分加入了自己的一些理解 分享给一起学习node的小伙伴 自己还是个初学者 有很多地方理解的不到位 一起交流

  一 什么是node

    1.1 对比node chrome

  二 node的特点

    2.1 异步I/O

    2.2 事件驱动

    2.3 单线程

  三 node的使用场景    

一)什么是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密集型任务并不可怕,合理的调度才是关键

深入浅出node(1) Node简介的更多相关文章

  1. Node.js的简介和安装

    一.Node.js的简介和安装 a)       什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...

  2. Node.js 原理简介

    Node.js 的官方文档中有一段对 Node.js 的简介,如下. Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript ...

  3. JS, Node.js, npm简介

    序 听过JS,听过Node,也听过Node.js,还听过npm,然而并不是很清楚的知道都代表什么,这两天调接口,然后前端同学很忙,就自己把前端代码拿过来跑了,也趁机了解一下这几个概念,下边做个小的总结 ...

  4. [Node.js] Node + Redis 实现分布式Session方案

    原文地址: http://www.moye.me/?p=565 Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Sessi ...

  5. cocos2d-x中Node与Node层级架构

    Cocos2d-x采用层级(树形)结构管理场景.层.精灵.菜单.文本.地图和粒子系统等节点(Node)对象.一个场景包含了多个层,一个层又包含多个精灵.菜单.文本.地图和粒子系统等对象.层级结构中的节 ...

  6. 在linux环境下配置node:node + npm + forever

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3574582.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  7. Hadoop ->> Name node/Data node和Job tracker/Task tracker的区别

    刚好看到关于Name node/Data node和Job tracker/Task tracker的解释,一开始有点混淆,以为说Job tracker必须运行在Name node上,他们俩有依赖或者 ...

  8. Cocos2d-x Lua Node与Node层级架构

    Cocos2d-x Lua采用层级(树形)结构管理场景.层.精灵.菜单.文本.地图和粒子系统等节点(Node)对象.一个场景包含了多个层,一个层又包含多个精灵.菜单.文本.地图和粒子系统等对象.层级结 ...

  9. cocos2d-x 3.0 Node与Node层级结构

    节点解释: 节点是场景图的基本元素.场景图的基本元素必须是节点对象或者是节点对象的子类. 其中主要可以看到Layer.MenuItem.Scene.Sprite.TMXTiledMap(解析and渲染 ...

  10. nyoj 263-精 挑 细 选 (sort(P, P+m, cmp); bool cmp(node a, node b)...)

    263-精 挑 细 选 内存限制:64MB 时间限制:3000ms 特判: No 通过数:14 提交数:26 难度:1 题目描述: 小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根 ...

随机推荐

  1. Spring学习记录(十)---使用FactoryBean配置Bean

    之前学了,配置bean可以用普通全类名配置.用工厂方法配置,FactoryBean又是什么呢 有时候配置bean要用到,IOC其他Bean,这时,用FactoryBean配置最合适. FactoryB ...

  2. IM消息送达保证机制实现(二):保证离线消息的可靠投递

    1.前言 本文的上篇<IM消息送达保证机制实现(一):保证在线实时消息的可靠投递>中,我们讨论了在线实时消息的投递可以通过应用层的确认.发送方的超时重传.接收方的去重等手段来保证业务层面消 ...

  3. CSS之flex布局

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. Distributed2:Linked Server Login 添加和删除

    一,通过 sys.sp_addlinkedsrvlogin 创建Linked Server的Login 当在local Server 上需要访问Linked Server时,Local Server ...

  5. 【转】C# using的三种使用方法

    原文地址http://www.cnblogs.com/fashui/archive/2011/09/29/2195061.html,感谢心茶前辈的总结. 1.using指令 using+命名空间,这种 ...

  6. CSS3 Media Queries实现响应式布局

    概念我就不在这里写啦.大家可以看看以下网页: http://www.runoob.com/cssref/css3-pr-mediaquery.html http://www.w3cplus.com/c ...

  7. 深入学习jQuery自定义动画

    × 目录 [1]属性对象 [2]可选参数 [3]选项参数 前面的话 很多情况下,前面介绍的jQuery动画的简单效果无法满足用户的各种需求,那么就需要对动画有更多的限制,需要采取一些高级的自定义动画来 ...

  8. Create Volume 操作(Part III) - 每天5分钟玩转 OpenStack(52)

    本节是创建 Volume 的第三部分,也是最后一部分:cinder-volume 的处理过程. 第一部分和第二部分可以参考前面两个小节.cinder-volume 通过 driver 创建 volum ...

  9. iOS 使用xib后获取view的frame出错的问题

    如果控制器使用xib做的,在viewDidLoad方法中获取的view.frame是不正确的 这根xib的加载有关, 可以把需要做的事情写在viewWillAppear中就能解决

  10. C语言 第三章 基础编程测试与练习

    1.屏幕上输出:This is a C program 2.输入两个整数,求两个数的和,如下所示:请输入第1个数:5请输入第2个数:3 3加5的和是8 3.完成华氏温度与摄氏温度间的转换,如下所示:请 ...