node.js 回调函数、事件循环、EventEmitter ar

异步编程 

node.js 编程的直接体现就是回调,异步编程依托于回调来实现: node使用了大量的回调函数,所有API都支持回调函数 。如读取文件等。

这里对不懂线程和异步和同步的稍微解释下这三个名词 。

线程 : 简单的说就是做一件事 . 即执行一段程序代码 。js引擎就是一个单线程 的 处理 方式 .单线程是说 同一时间只能做一件事 。

同步 :就是这件事必须要先做完前面的才能做后面的,否则后面的无法完成. 这就像我们的js代码会从上往下 运行 .

异步 :简单的说就是两个线程,你做你的,我做我的,相互并不影响。

并发 :就是 说多个异步线程同时运行, 所以 这种情况 处理效果最高 ,也是我们大多 数时候的处理方式  。

同步的情况下,这件事必须从上 往 下 , 当然 也可以是两个线程, 但这两个线程 必须前一个做完才能执行下一个 .

如  :function  fun(){

var x=1; //先运行 此行

      var y=1;//再运行此行

      consoel.log(x+y);//最后运行此行

  }

fun();  //调用 fun函数

异步的情况下 ,  大家各干各的,说不准说先做完 谁后做完 .

如 :      console.log("12221");

setTimeout(function(){

      console.log("111");

    },1000);

     console.log("13331");

这个定时器,setTimeout会开启一个异步的线程,等一秒后再执行回调函数里的代码 .并不行阻塞 13331 的输出执行 .

当然这里还有一个异步并发安全的问题,即是说当两个异步的线程 同时做一件事时  就会产生异步并发的安全问题 .

node 回调函数   

好了,这里继续讲 node 的 回调函数。

下面以 阻塞代码和非阻塞代码为例 :

阻塞代码 : var fs=require("fs");  // 获取fs模块  即文件读取模块

      var data=fs.readFileSync("input.txt");//读取input.txt 文件  文件内容是  菜鸟教程官网地址:www.runoob.com

      console.log(data.toString());

      console.log("程序执行结束");

执行 :文件存放 在  D:\softSetting\node\a 文件夹下  ,所以 : 执行代码如下

下面再来个非阻塞的读取文件的例子:

同样的  D:\softSetting\node\a  文件夹下 创建 main2.js

  var fs=require("fs");

  fs.readFile("input.txt",function(err,data){

    if(err){ return console.error(err);}

    console.log(data.toString());

  }); 

  console.log("程序执行结束");

执行 :

  

node 的回调函数 是这样的:function(err,data){  }

err 表示 错误 ,当 回调函数 执行 出错时 自动出现err 内容 , data表示回调函数接收数据 。

node 事件循环 -这个比较难 

node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高

node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。这个下一章单独讲 。

node.js 单线程类似进入一个while(true) 的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。

以上是node 事件循环的基本模型,也被称为非阻塞式IO或事件驱动IO , webserver 一直接受请求而不等待任何读写操作,EventEmitter 绑定事件on并监听事件(Event) .

在事件驱动模型中,会生成一个主循环Event Loop听事件,当检测到事件时触发回调函数 Event Handlers .

EventEmitter 补充 :

             

时间: 2024-12-20 01:19:06

node.js 回调函数、事件循环、EventEmitter ar的相关文章

Node.js 回调函数 1) 阻塞 ,同步 2) 非阻塞 ,异步.

1.阻塞. 同步. 1) 读取的文件: input.txt 菜鸟教程官网地址:www.runoob.com 2) main.js 1 var fs = require("fs"); 2 3 //同步读取, 阻塞代码,按顺序执行的 4 var data = fs.readFileSync('input.txt'); 5 6 console.log(data); 7 console.log(data.toString()); 8 console.log("程序执行结束!"

【Node.js学习四】 Node.js回调函数

Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻塞或等待文件 I/O 操作.这就大大提高了 Node.js 的性能,可以处理大量的并发请求. 下面对阻塞代码和非阻塞代码分别举出一例

5、Node.js 回调函数

内容:回调函数:阻塞/同步.非阻塞.和异步区别:阻塞和非阻塞代码实例 Node.js 回调函数Node.js 异步编程的直接体现就是回调.异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了.回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻塞或等待文件 I/O 操作.这就大大提高了 Node.js 的性能,可

Node.js 回调函数

callback: A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.

同步和异步 以及node js 回调函数

1.创建一个input.txt 文本文件   里面随便写一些内容 2.创建main.js文件 var fs = require("fs"); var data = fs.readFileSync('input.txt');(这个地方一定要加上后缀的名字) console.log(data.toString()); console.log("程序执行结束!"); 3.上述为同步的代码 执行结果如下 $ node main.js 菜鸟教程官网地址:www.runoob.

node.js回调函数

Node.js 异步编程的直接体现就是回调. 阻塞代码var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("程序执行结束!"); //readFileSync()同步的方式读取文件 //执行结果如下 $ node main.js xxxxxxxxxxxxxxx(input.txt内容) 程序执行结束! 非阻

node.js回调函数 - 阻塞与非阻塞

1.阻塞调用(读取完文件再执行后面的操作) var fs = require("fs"); var data = fs.readFileSync('/fs.txt'); console.log(data.toString()); console.log("程序执行结束!"); 输出结果: “文件内容” “程序执行结束!” 2.非阻塞调用(读取文件和其他操作同步执行) var fs = require("fs");  fs.readFile('/f

Node js 安装+回调函数+事件

/* 从网站 https://nodejs.org/zh-cn/ 下载 这里用的 9.4.0 版本 下载完安装 安装目录是 D:\ApacheServer\node 一路默认安装 安装后打开cmd命令行输入 path 在显示的结果中查找是否有 D:\ApacheServer\node有的话表示环境变量中已经包含了 D:\ApacheServer\node\ 可以在cmd中直接使用 node 这个命令 如在当前命令行中输入 node --version 显示 v9.4.0 当前nodejs的版本

Node.js入门:事件机制

Evented I/O for V8 JavaScript 基于V8引擎实现的事件驱动IO. 事件机制的实现 Node.js中大部分的模块,都继承自Event模块(http://nodejs.org/docs/latest/api/events.html ).Event模块(events.EventEmitter)是一个简单的事件监听器模式的实现.具有addListener/on,once,removeListener,removeAllListeners,emit等基本的事件监听模式的方法实现