最近看了一本书,说了一些Node.js的东西,现在来记录一下,让自己记得更牢靠一点。
在书上,是这样介绍的:Node.js模型是源于Ruby的Event Machine 和 Python的Twisted模型,使用事件循环
运行JavaScript程序。不同于传统程序设计模型的阻碍调用,Node.js使用单个线程的事件循环来执行JavaScript程序
代码。并且,在书里面,也对阻碍调用进行了解释:运行程序时,必须等到上一个调用完成后,才能执行下一个函数
调用,如果调用的是处理文件I/O,因为执行时间较长,就会阻碍之后的程序代码的执行(CPU只能等待I/O结束)。但
是Node.js却不是这样,它用事件驱动程序设计来解决阻碍调用影响程序运行效率的问题。
对于有一定基础知识的人,肯定是知道什么是I/O是什么,可是任然是有人不知道什么是I/O的。那么现在就
来解释一下什么是I/O。简单的说下,所谓的I/O就是输入输出流,也就是input/output。事件在输入输出流里面,在上
一个函数没有执行完毕时,是不会进行下一件事件的。而NODE.JS的主要设计理念是I/O是影响程序效率的最大障碍,为
了提升程序运行效率,使用无阻碍I/O的事件驱动程序来建立Node.js,以事件循环方式运行Node.js程序。说到这里,
就要解释一下什么是事件循环了:事件循环是一个持续工作的循环,主要提供了2个功能,即事件侦测和触发事件处理,
在每一次执行循环就是在侦测是否有事件触发,如果有,事件循环负责判断事件绑定了哪一个回拨函数,然后调用这个
回拨函数。
有一点不得不说,Node.js使用单线程方式来执行程序代码,并没有并行执行任何Javascript程序代码,而且在
任何时刻只会有单一片段的程序代码在执行,只是因为使用无阻碍I/O的异步程序设计,程序执行就不会被缓慢的I/O操
作阻碍,所以能够大幅度的提升程序的运行效率。
Node.js的精神是将程序设计改为事件驱动的异步程序设计,而我们之所以可以如此进行程序设计,就是因为
Javascript的闭包概念。
因为Javascript函数是第一级对象(Function是Object的第一级实例),我们可以将函数当成参数来传递给其
它函数,之前的回拨函数就是使用此方式。闭包是指函数可以继承其上一层环境的变量,记住函数定义时上下文的内容,
即上衣曾函数范围内声明的变量值。
对于Node.js来说,Javascript闭包可以帮助我们创建异步程序设计的Node.js程序,因为事件驱动程序设计的
执行流程是事件决定,当事件出发时,Node.js事件循环可以调用此事件的回拨函数进行处理,回拨函数是以参数方式来
传递给其他函数的。
问题是回拨函数是在事件除法之后才会被调用和执行,当它调用时起执行范围可能早已返回释而消失。Javascript
闭包可以神奇记住调用回拨函数前的状态,简单的说,Javascript范围并不是执行时的状态,而是源代码的上下文内容,
闭包可以帮助我们记住调用前的状态(也就是具有缓存的作用,但是这个缓存却不会对全局造成影响),让程序正确的执行。
下面时最近搞错的两个方法,一个是join,另外一个是split。
join是对数组的操作,返回值是字符串,split是对字符串的操作,返回值是数组。两个方法的作用相似,但是操
做对象和返回对象正好相反。之前闹了一个大笑话.........

关于node的基础理论,书上看来的的更多相关文章

  1. JAVA理解逻辑程序的书上全部重要的习题

    今天随便翻翻看以前学过JAVA理解逻辑程序的书上全部练习,为了一些刚学的学弟学妹,所以呢就把这些作为共享了. 希望对初学的学弟学妹有所帮助! 例子:升级“我行我素购物管理系统”,实现购物结算功能 代码 ...

  2. Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

    注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...

  3. c++编程思想(四)--对象和隐藏(感觉书上有误)

    c++编程思想里数据抽象和隐藏实现实际就是通常所说的类和封装: 封装,继承,多态对象特点说的很多,就不再说了 关于封装,本人觉得书上有个地方写的有问题,p145和p153都提到Y::f(X*)引用了X ...

  4. Node.js~在linux上的部署~pm2管理工具的使用

    之前写了两篇关于在linux上部署nodejs的文章,大家如果没有基础可以先看前两篇<Node.js~在linux上的部署>,<Node.js~在linux上的部署~外网不能访问no ...

  5. OK 开始实践书上的项目一:即使标记

    OK 开始实践书上的项目一:及时标记 然而....又得往前面看啦! ----------------------我是分割线------------------------ 代码改变世界

  6. 使用express+multer实现node中的图片上传

    使用express+multer实现node中的图片上传 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在n ...

  7. node中间层实现文件上传

    一般情况下,前端的文件上传一般都是通过form表单的(<input type="file" />)来完成文件的上传,如果使用node中间层完成跨域,文件的上传就需要在n ...

  8. OpenACC 书上的范例代码(Jacobi 迭代),part 3

    ▶ 使用Jacobi 迭代求泊松方程的数值解 ● 使用 data 构件,强行要求 u0 仅拷入和拷出 GPU 各一次,u1 仅拷入GPU 一次 #include <stdio.h> #in ...

  9. java代码流类。。程序怎么跟书上的结果不一样???

    总结:这个程序很容易懂.的那是这个结果我觉得有问题啊..怎么“stop”后,输出的内容是输入过的呢? 应该是没有关系的呀,与输入的值是不同的....怎么书上运行的结果和我的不一样啊 package c ...

随机推荐

  1. mitm6:通过IPv6攻破IPv4网络

    一.前言 虽然IPv6正在互联网上逐步推广,但在内部网络环境中使用IPv6的公司依然非常稀少.然而,大多数公司并不知道,即使他们没有主动去使用IPv6,但从Windows Vista以来,所有的Win ...

  2. [国嵌笔记][017][Makefile工程管理]

    Makefile的用途 1.make能够使整个程序的编译.链接只需一个命令就可以完成 2.make的工作主要依赖于Makefile的文件.Makefile文件描述了整个程序的编译.链接等规则,使之自动 ...

  3. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](六)

    前言 大家好,我是Rector 又是星期五,很兴奋,很高兴,很high...啦啦啦... Rector在图享网又和大家见面啦!!!上一篇<一步一步创建ASP.NET MVC5程序[Reposit ...

  4. 如何用SVN版本控制器将提交的文件还原到以前的版本

    工具/原料 SVN乌龟软件和相关的文件 方法/步骤 在相关的文件中右击鼠标,按右图进行选择 在弹出框的地方点击我标记的地方,查看下曾经提交过的版本文件 在弹出框的地方,上面就是有版本号,下面就是我们文 ...

  5. linux 保留内核中sas驱动的加载导致crash问题

    [root@localhost ~]# uname -a Linux localhost.localdomain -.el7.x86_64 问题描述,在crash的时候,小内核因为分配中断号失败而触发 ...

  6. 从(0,0)到(m,n),每次走一步,只能向上或者向右走,有多少种路径走到(m,n)

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  7. sitemesh网页布局

    看项目时发现对应页面下找不到侧栏部分代码,仔细观察后发现页面引入了sitemesh标签,查了下资料原来是页面用了sitemesh框架解!耦!了! 以前多个模块包含相同模块时总是include jsp文 ...

  8. awk解决实际问题例子

    awk很有用,就不说了,下面记录几个我遇到的例子,汇总 1 获得linux环境变量(ENVIRON) awk 'BEGIN{print ENVIRON["PATH"];}' /et ...

  9. python---进程与线程

    进程和线程 什么是线程(thread)什么是进程 线程:操作系统能够进行运算调度的最小单位.它被包含在进程中,是进程中的实际运作单位.是一串指令的集合 一个线程指的是进程中一个单一顺序的控制流,一个进 ...

  10. 【转】globk和glorg中使用的apr文件

    gamit和globk分析设置先验坐标和速度的要求和规则是不同的,因为在不同的阶段和环境下需要不同.从相位数据和松弛约束坐标和它们的方差得到的精 密坐标的可靠估计是假设对先验值的调整很小,也就是说在调 ...