深入浅出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 题目描述: 小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根 ...
随机推荐
- defered,promise回顾
defered,promise回顾 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_o ...
- OleDB Destination 用法
第一部分:简介 OleDB Destination component 是将数据流load 到destination,共有5种Data Access Mode,一般的Destination compo ...
- 计算程序总行数的Python代码
最近需要统计一下项目中代码的总行数,写了一个Python小程序,不得不说Python是多么的简洁,如果用Java写至少是现在代码的2倍. import os path="/Users/ron ...
- JavaScript 命名空间
<script type="text/javascript"> Namespace=new Object(); Namespace.register=function( ...
- Mobile Web中URL设计问题
自己虽然也注册了CSDN账号,但是没有在上面发表过博客等内容.不过经常在Google里面搜索相关内容时,会显示csdn的结果.这也说明国内很多IT人员都会在CSDN发表博客,记录解决问题过程或者想法. ...
- 教你如何塑造JavaScript牛逼形象
如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...
- CRL开发框架发布2.2版
CRL 2.3.0.0 CRL是一个面向对象的轻便型ORM业务框架 数据处理使用了对象/数据映射,采用Lambda表达式来表示条件查询,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查 ...
- spring源码分析之定时任务概述
Spring框架提供了TaskExcutor的异步执行和TashScheduler的任务定时执行接口,同样spring也提供了线程池或者CommonJ的代理. TaskExecutor的类型 Simp ...
- Machine Learning
Recently, I am studying Maching Learning which is our course. My English is not good but this course ...
- hibernate笔记--缓存机制之 一级缓存(session缓存)
一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...