深入浅出node(1) Node简介
这一系列主要是自己在学习深入浅出node.js这本书的学习笔试,部分加入了自己的一些理解 分享给一起学习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简介的更多相关文章
- Node.js的简介和安装
一.Node.js的简介和安装 a) 什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...
- Node.js 原理简介
Node.js 的官方文档中有一段对 Node.js 的简介,如下. Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript ...
- JS, Node.js, npm简介
序 听过JS,听过Node,也听过Node.js,还听过npm,然而并不是很清楚的知道都代表什么,这两天调接口,然后前端同学很忙,就自己把前端代码拿过来跑了,也趁机了解一下这几个概念,下边做个小的总结 ...
- [Node.js] Node + Redis 实现分布式Session方案
原文地址: http://www.moye.me/?p=565 Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Sessi ...
- cocos2d-x中Node与Node层级架构
Cocos2d-x采用层级(树形)结构管理场景.层.精灵.菜单.文本.地图和粒子系统等节点(Node)对象.一个场景包含了多个层,一个层又包含多个精灵.菜单.文本.地图和粒子系统等对象.层级结构中的节 ...
- 在linux环境下配置node:node + npm + forever
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3574582.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Hadoop ->> Name node/Data node和Job tracker/Task tracker的区别
刚好看到关于Name node/Data node和Job tracker/Task tracker的解释,一开始有点混淆,以为说Job tracker必须运行在Name node上,他们俩有依赖或者 ...
- Cocos2d-x Lua Node与Node层级架构
Cocos2d-x Lua采用层级(树形)结构管理场景.层.精灵.菜单.文本.地图和粒子系统等节点(Node)对象.一个场景包含了多个层,一个层又包含多个精灵.菜单.文本.地图和粒子系统等对象.层级结 ...
- cocos2d-x 3.0 Node与Node层级结构
节点解释: 节点是场景图的基本元素.场景图的基本元素必须是节点对象或者是节点对象的子类. 其中主要可以看到Layer.MenuItem.Scene.Sprite.TMXTiledMap(解析and渲染 ...
- nyoj 263-精 挑 细 选 (sort(P, P+m, cmp); bool cmp(node a, node b)...)
263-精 挑 细 选 内存限制:64MB 时间限制:3000ms 特判: No 通过数:14 提交数:26 难度:1 题目描述: 小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根 ...
随机推荐
- c# 文件属性读取操作及文件之间操作
c# 获取文件最后修改日期代码FileInfo f = new FileInfo(@"c:\1.txt");Console.WriteLine(f.LastWriteTime.To ...
- AngularJs入门之表单开发
本文和大家分享的主要是前端开发中必备的AngularJs框架表单开发相关基础知识,希望对大家使用和学习AngularJs有所帮助. 1.简单的表单提交: 2.更多的表单元素: 3.初始化表单: 代码 ...
- Sql Server系列:触发器
触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...
- 【Win10应用开发】自定义磁贴通知的排版
前面老周用了两篇烂文,向大家介绍了Adaptive磁贴的模板使用.那些XML模板已经很强大了,不过,如果你觉得那些排版还不足以满足需求,不妨试试自己来定义磁贴的内容. 其实,Runtime App支持 ...
- 【Win 10 应用开发】打印UI元素
Windows App支持将UI界面进行打印的功能,这与浏览器中的打印网页的用途相近,其好处就是“所见即所得”,直接把界面上呈现的内容打印下来,比重新创建打印图像方便得多. 要在通用App中实现打印, ...
- AngularJS之Scope及Controller(一)
前言 之前有接触过基本的AngularJS,未过多涉及,于是乎本系列我们来着重讲讲AngularJS,对AngularJS中重要的几大内容进行梳理并进行一些小的例子的书写.在之前项目过程中用到过ava ...
- C#:根据银行卡卡号判断银行名称
原文地址:android 根据银行卡卡号判断银行 原文是 java ,现在将它翻译成 C# ,并对代码重新编排整理,博主是一个今年刚出来的应届毕业生,不足之处请多多包涵. 根据银行卡号判断所属银行,依 ...
- 小菜学习Winform(七)系统托盘
前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...
- 使用Free Spire.XLS插入图表
使用Free Spire.XLS插入图表 前言 最近在研究Office中间件,上网搜索了下,比较出名的有两个:Aspose和Spire,两者功能齐全,对Office的支持趋近完善,但售价不菲.仔细搜索 ...
- c#和Javascript中去重总结
一.前言 去重在我们的开发过程中经常遇到,避免重复元素的添加,我们需要对获取到的集合(包括List.Array等) 做相关的过滤操作.确保对象的唯一性,从而达到保证数据不冗余重复.由于自己是做.net ...