Node 入门<1>
1. Node
JavaScript web服务器框架,主要特点:事件驱动,异步 I/O,强制不共享任何资源的单线程,单进程系统。
每一个node进程都构成网络应用中的一个节点。
左图是Chrome浏览器的大体框架,右图是Node大体框架。补充说明webkit是用c语言开发的浏览器内核。
浏览器的主要组件有:
- HTML,XML,CSS,JavaScript 解析器
- LayOut
- 文字和图形渲染
- 图像解码
- GPU交互
- 网络访问
- 硬件加速
Node是一个JavaScript web应用服务器框架,即在Node中,JavaScript 可以访问本地文件,搭建websocket服务器端,可以连接数据库,可以创建web worker多线程。
2. 异步事件如何协作
Node是事件驱动的,而事件又是异步的。这里就需要解决多个异步事件如何协作的问题,也就是异步事件之间如何通信。
方法:将函数作为对象传递给方法作为实参进行调用。
Node的优势主要事件驱动异步I/O,即避免CPU等待I/O或者网络请求,从而达到高效利用CPU,快速处理大量网络请求的效果。但是Node保持JavaScript单线程的特点,意味这,Node 线程之间无法共享任何状态。单线程避免了多线程上下文切换,和资源共享带来的问题,但是它也避免了多线程的优势,带来了一些问题:
- 单线程无法利用多核CPU
- 错误会导致整个应用退出,应用的健壮性值得考验
- 如果大量计算占用cpu,将导致无法调用异步I/O
解决方案是:创建工作线程来进行计算,避免大量计算主线程的I/O处理。
补充:CPU,进程,线程之间的关系
单个CPU一次只能运行一个任务,即一个进程。一个进程可以包含多个线程,进程内的内存空间是多个线程共享的,多个线程可以同时运行。但是由于进程内的内存空间的数量或者性质不同,<1>导致某些内存空间(a)一次只允许一个线程使用,那么如何解决多线都要使用的情况呢,利用互斥锁来解决这个问题,即如果有一个线程正在使用a内存空间,那么就给a内存空间上锁,其他要访问a内存空间的线程,只能等待,当使用完之后,a内存空间的锁被打开,下一个线程才允许访问。<2>某些内存空间(b)只允许特定数量的线程访问,如何解决超过该限制数量的线程使用该内存空间呢,利用信号量来解决这个问题,即给(b)设置一个信号量,当一个线程进入则该信号量-1,如果一个线程使用完毕,则信号量+1,若信号量=0时,表示该资源已经达到线程的访问上限,不再允许其他线程访问,其他线程只能等待。
进程是由程序,数据集合和进程控制块三部分组成。程序是指令的集合,数据集合是程序在执行时分配的数据和工作区,进程控制块包含进程描述信息和控制信息,是进程存在的唯一标识。进程拥有独立的地址空间,处理机分配给线程,线程通过消息通信协同完成一个任务。
JavaScript是单线程的,是指JavaScript只在一个线程上运行(创建了web worker 的JavaScript脚本例外)。而V8 JavaScript 引擎是由C++ 编写,是一个多线程程序,单个JavaScript 只能在一个线程上运行,其他的V8线程在后台配合浏览器的I/O线程。补充:web worker允许一个JavaScript脚本创建多个线程,子线受主线程的控制,不能操作DOM。JavaScript 单线程也是为了避免多线程同时造作DOM带来不一致性。worker 线程与主线程的通信也是通过事件机制来完成的。
3.语言规范
浏览器端是W3C标准,Node端是CommonJs标准。
Node 入门<1>的更多相关文章
- <Node入门经典>读书笔记
最近在读<Node入门经典>, 之前没有做笔记, 今天开始把看过自己又写了的代码放这里以免忘记. express var express = require('express') var ...
- Node入门(转)
原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...
- node入门笔记
看了<node入门>http://www.nodebeginner.org/index-zh-cn.html.有些疑难点记下来. 在导出模块的时候给出的代码是这样的 var http = ...
- Node入门教程(1)目录
aicoder.com 全栈实习之简明 Node 入门文档 aicoder.com 线下实习: 不 8000 就业,不还实习费. 如果需要转载本文档,请联系老马,Q: 515154084 JS基础教程 ...
- [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题
花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...
- 《Node入门》读书笔记——用Node.js开发一个小应用
Android APP的开发告一段落,一个稳定的.实现了基本功能的APP已经交付用户使用了!我和老板交流了下,接下来准备转战Node.js了,而且一部分前端的功能也要做进去!哈哈哈~~~接下来要朝一个 ...
- node入门(三)——gulp运用实例
在上一篇<node入门(二)——gulpfile.js初探>中,我们知道了(看懂入门二及其参考资料)怎么运用gulp来更高效的开发,现在来示范一下. 在package.json里面配置好d ...
- node入门(二)——gulpfile.js初探
本文关于gulpfile.js怎么写,利于完成个性化需求.本文开发环境默认已安装node,详情参考<node入门(一)——安装>. 一.安装gulp npm install -g gulp ...
- Node 入门
Node 入门 NodeJs 安装,HelloWorld 下载地址 https://nodejs.org/zh-cn/ https://nodejs.org/dist/ 用 Node命令行输出Hell ...
- Node入门教程(6)第五章:node 模块化(上)模块化演进
node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理.所以并没有模块化的规范设计. 项目小的时候,我们可以通过命名空间.局部作用域.自执行函数等手段实现变量不 ...
随机推荐
- [UVA1402]Robotic Sort;[SP2059]CERC07S - Robotic Sort([洛谷P3165][CQOI2014]排序机械臂;[洛谷P4402][Cerc2007]robotic sort 机械排序)
题目大意:一串数字,使用如下方式排序: 先找到最小的数的位置$P_1$,将区间$[1,P_1]$反转,再找到第二小的数的位置$P_2$,将区间$[2,P_2]$反转,知道排序完成.输出每次操作的$P_ ...
- [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]
题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...
- BZOJ1875: [SDOI2009]HH去散步 图上边矩乘
这道题十分的坑…… 我作为一只连矩乘都不太会的渣渣看到这道题就只能神搜了….. 首先说一下普通的矩乘求方案,就是高出邻接矩阵然后一顿快速幂….. 矩乘一般就是一些秘制递推….. 再说一下这道题,我们可 ...
- IDEA 使用maven创建web项目,打包war时不会创建class文件
使用maven创建项目后我有创建了个src的目录,导致maven编译不能识别我创建的src文件下的Java文件 修改这样后就可以识别编译Java文件 今天又给自己挖了个坑.......
- struts2学习笔记(二)
一. 国际化的目标 1). 如何配置国际化资源文件 I. Action 范围资源文件: 在Action类文件所在的路径建立名为 ActionName_language_country.properti ...
- AOP编程的常用实现方式
aop代理分为静态代理.jdk动态代理.cglib动态代理 通过动态代理的方式实现横向扩展,实现权限校验.日志等功能. jdk静态代理:代理类和委托类实现同一接口,并且在代理类中需要硬编码接口. jd ...
- 【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化
[597][Usaco2008 Mar]土地购买 [题目描述] 有N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000 ...
- 【BZOJ2820】YY的GCD [莫比乌斯反演]
YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 求1<=x<=N, ...
- hdu 3374 String Problem (kmp+最大最小表示法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...
- LeetCode 151 reverse word in a string
Given an input string, reverse the string word by word. For example, Given s = "the sky is blue ...