zoukankan      html  css  js  c++  java
  • 关于node的基础理论,书上看来的


    最近看了一本书,说了一些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是对字符串的操作,返回值是数组。两个方法的作用相似,但是操
    做对象和返回对象正好相反。之前闹了一个大笑话.........

  • 相关阅读:
    【带权并查集】How Many Answers Are Wrong HDU
    【带权并查集+离散化】Parity game POJ
    【并查集】Supermarket POJ
    【并查集】P3958 奶酪
    【并查集-判环】Is It A Tree? POJ
    【最短路/线性差分约束】Layout POJ
    【最短路-负环】Extended Traffic LightOJ
    【最短路】Subway POJ
    【最短路-判负环 Floyd】Wormholes POJ
    [JZOJ]1293.气象牛[区间DP]
  • 原文地址:https://www.cnblogs.com/qishuaishuai/p/8454805.html
Copyright © 2011-2022 走看看