1. Node

   JavaScript web服务器框架,主要特点:事件驱动,异步 I/O,强制不共享任何资源的单线程,单进程系统。

  每一个node进程都构成网络应用中的一个节点。

           

左图是Chrome浏览器的大体框架,右图是Node大体框架。补充说明webkit是用c语言开发的浏览器内核。

  浏览器的主要组件有:

  1. HTML,XML,CSS,JavaScript 解析器
  2. LayOut
  3. 文字和图形渲染
  4. 图像解码
  5. GPU交互
  6. 网络访问
  7. 硬件加速

  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>的更多相关文章

  1. <Node入门经典>读书笔记

    最近在读<Node入门经典>, 之前没有做笔记, 今天开始把看过自己又写了的代码放这里以免忘记. express var express = require('express') var ...

  2. Node入门(转)

    原文链接:http://www.nodebeginner.org/index-zh-cn.html Node入门 作者: Manuel Kiessling翻译: goddyzhao & Gra ...

  3. node入门笔记

    看了<node入门>http://www.nodebeginner.org/index-zh-cn.html.有些疑难点记下来. 在导出模块的时候给出的代码是这样的 var http = ...

  4. Node入门教程(1)目录

    aicoder.com 全栈实习之简明 Node 入门文档 aicoder.com 线下实习: 不 8000 就业,不还实习费. 如果需要转载本文档,请联系老马,Q: 515154084 JS基础教程 ...

  5. [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题

    花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...

  6. 《Node入门》读书笔记——用Node.js开发一个小应用

    Android APP的开发告一段落,一个稳定的.实现了基本功能的APP已经交付用户使用了!我和老板交流了下,接下来准备转战Node.js了,而且一部分前端的功能也要做进去!哈哈哈~~~接下来要朝一个 ...

  7. node入门(三)——gulp运用实例

    在上一篇<node入门(二)——gulpfile.js初探>中,我们知道了(看懂入门二及其参考资料)怎么运用gulp来更高效的开发,现在来示范一下. 在package.json里面配置好d ...

  8. node入门(二)——gulpfile.js初探

    本文关于gulpfile.js怎么写,利于完成个性化需求.本文开发环境默认已安装node,详情参考<node入门(一)——安装>. 一.安装gulp npm install -g gulp ...

  9. Node 入门

    Node 入门 NodeJs 安装,HelloWorld 下载地址 https://nodejs.org/zh-cn/ https://nodejs.org/dist/ 用 Node命令行输出Hell ...

  10. Node入门教程(6)第五章:node 模块化(上)模块化演进

    node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理.所以并没有模块化的规范设计. 项目小的时候,我们可以通过命名空间.局部作用域.自执行函数等手段实现变量不 ...

随机推荐

  1. [UVA1402]Robotic Sort;[SP2059]CERC07S - Robotic Sort([洛谷P3165][CQOI2014]排序机械臂;[洛谷P4402][Cerc2007]robotic sort 机械排序)

    题目大意:一串数字,使用如下方式排序: 先找到最小的数的位置$P_1$,将区间$[1,P_1]$反转,再找到第二小的数的位置$P_2$,将区间$[2,P_2]$反转,知道排序完成.输出每次操作的$P_ ...

  2. [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]

    题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...

  3. BZOJ1875: [SDOI2009]HH去散步 图上边矩乘

    这道题十分的坑…… 我作为一只连矩乘都不太会的渣渣看到这道题就只能神搜了….. 首先说一下普通的矩乘求方案,就是高出邻接矩阵然后一顿快速幂….. 矩乘一般就是一些秘制递推….. 再说一下这道题,我们可 ...

  4. IDEA 使用maven创建web项目,打包war时不会创建class文件

    使用maven创建项目后我有创建了个src的目录,导致maven编译不能识别我创建的src文件下的Java文件 修改这样后就可以识别编译Java文件 今天又给自己挖了个坑.......

  5. struts2学习笔记(二)

    一. 国际化的目标 1). 如何配置国际化资源文件 I. Action 范围资源文件: 在Action类文件所在的路径建立名为 ActionName_language_country.properti ...

  6. AOP编程的常用实现方式

    aop代理分为静态代理.jdk动态代理.cglib动态代理 通过动态代理的方式实现横向扩展,实现权限校验.日志等功能. jdk静态代理:代理类和委托类实现同一接口,并且在代理类中需要硬编码接口. jd ...

  7. 【bzoj1597- [Usaco2008 Mar]土地购买】斜率优化

    [597][Usaco2008 Mar]土地购买 [题目描述] 有N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000 ...

  8. 【BZOJ2820】YY的GCD [莫比乌斯反演]

    YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 求1<=x<=N, ...

  9. hdu 3374 String Problem (kmp+最大最小表示法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...

  10. 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 ...