node事件循环和process模块实例分析

来源:脚本之家  责任编辑:小易  

16年9月17日清徐出发上高速--广元--雅安--新都桥--亚丁(呆了两天)--巴塘--八宿--波密--林芝--拉萨(三天、去了羊湖)--那曲(去了纳木错)--格尔木(呆了两晚)--兰州--太原。川进青出总共17天。出行花费10000左右!夫妻两人都是90年的驾驶14年帕萨特1.8T、期间过水毁路的时候把前保险杠下面的护板磕掉了重拖底34次吧命好没磕到关键地方我只有一个塑料护板??!

本文实例讲述了node事件循环和process模块。分享给大家供大家参考,具体如下:

北汽幻速S34S店参考最低价:4.48-5.98万北汽幻速S3,轴距达到2685mm,足足跟远景X1差了两个级别。幻速S3是这几款车SUV中设计最粗犷的一款,如果你觉得推荐其他三款车都太城市了的话,那这款幻速S3你肯定喜欢。当然粗犷不仅体现在设计上,离地间隙、通过能力方面幻速S3也要优于其他车型。江淮瑞风S34S店参考最低价:5.38-8.78万江淮瑞风S3搭载了一款全新的1.5L发动机,在加入了双VVT技术后,车辆的动力有小幅提升,油耗则有所降低。新车新增了一款黑棕的配色,并加入了后排中央头枕,后备厢也改为全平设计。此外,8英寸中控屏、无钥匙进入/一键启动、全景摄像头等配置也是首次加入。长安

1.node.js事件循环

小苏打白醋清洗洗衣机有用吗?可以倒是可以的。只不过用白醋和小苏打清理洗衣机的效果并不是特别好。现在清理洗衣机比较有效的办法有三种:1、购买洗衣机清洗剂,进行洗衣机的清洁。(2~3个周清理一次)2、找专业的清理人员上门拆洗内桶。(多多少少对洗衣机有一定的损害)3、换一台免清洗的洗衣机,相对于上面两种方法更省事且有效。希望我的回答对你有帮助!

node.js事件可以继续插入事件,如果有事件就继续执行下去,每一次事件处理结束后等待下一个事件的发生;没有要处理的事件了,那整个就结束了;

《非诚勿扰》24为单身美女里,总有一个女嘉宾拒绝婚前性行为,并且明确规定,曾经黄菡老师调侃道:3号的位置就是留给拒绝婚前性行为的女嘉宾的。这不,14号女嘉宾冯晶伊就是这样的女生,每次孟爷爷介绍时,都会补一句:她有一个明确规定,就是坚决不同意婚前性行为。最后男嘉宾接受了这个条件,女生比较保守嘛,婚前不接受任何性行为也是可以理解。这个男生看了她的择偶标准时,却愣住了,因为她不仅要求婚前没有性行为,而且结婚后不要孩子在节目中男嘉宾也表示拒绝婚前性行为,我可以接受。但是婚后要丁克,我接受不了,我自己就是单传。被吓走了~女嘉宾才22岁,婚前拒绝性行为可以理解,婚后丁克就过分了,如果不生孩子,那我为什么还

setTimeout插入一个 计时器事件,时间单位为毫秒;

// 插入一个事件,让它多长(毫秒)时间以后执行一次 setTimeout(function() { console.log("set time out"); }, 3 * 1000); //3秒后执行显示 set time out setInterval插入一个不断循环的计时器事件; // 计时器事件, 每隔一段事件触发一次, time的单位是毫秒 setInterval(function () { console.log("get time doing"); }, 2 * 1000); // 每间隔2秒调用一次 //结果为: //get time doing //get time doing //get time doing //....

2.process模块属性和事件

process模块用来与当前进程互动,获取相关操作系统相关信息;process是全局变量不需要require导入模块;

属性:process.pid, process.version, process.platform, process.title,process.argv, process.execPath, process.stdout, process.stdin, process.stderr, process.env

// process是node的一个全局模块 console.log(process.pid); //11544 console.log(process.version); //V8.9.0 console.log(process.platform); //WIN32 console.log(process.title); //D:\Program Files\nodejs\node.exe // 在启动的时候,我们可以往程序里面传入参数, //参数都是字符串 console.log(process.argv); //结构为数组 //Array(2) ["D:\Program Files\nodejs\node.exe", "c:\Users\Administrator\Desktop\main1.js"]

exit事件, process.on()

// 当我们的node在每次退出的时候,都会抛出一个exit这样一个事件,如果我们用户监听这个事件,那么 // 当有exit事件发生的时候,我们之前设置的回掉函数,将会被调用; // process.on来监听事件 process.on("exit", function() { console.log("now node exit!!!!"); }); uncaughtException事件 function(err){}; // 当我们发生了一个未知的异常的时候,我们调用这个回掉函数; // node 停止处理当前这个事件,继续等待下一个事件的处理,不会整个退出, // 服务器就不会随意的奔溃 // 可以把这个错误,保存起来,方便我们去查找 process.on("uncaughtException", function(err) { console.log("uncaughtException called ", err); }); // 当我们的程序,如果运行的时候有异常,那么这个时候,我们可以通过捕获异常, // 如果说我们没有捕获的异常,这个uncaughtException // 如果发生uncaughtException,node是会退出的; // 没有主动捕获,所以javascript解释器,他是不会继续执行的;

处理的时候遇到了异常,如果这个异常监听,那么就继续处理下一个事件,否则直接停止退出node ;

3.process重要方法

    progress.cwd; // 获取当前的工作目录

    progress.uptime // 获取当前进程运行的时间

    progress.chdir // 设置当前的工作目录;

    progress.nextTick // 下一次循环的时候调用;

// current work director 当前的工作目录 // ./ ---> C:\Home\workspace\node_js process.chdir("C:\\Home\\workspace"); // 修改我们的工作目录,工作目录默认你的node是在哪个目录下启动的,就是那个目录为你的工作目录 console.log(process.cwd()); //c:\Users\Administrator\Desktop // while处理时间,进入等待时间之前调用,完成后,去事件里面来等待新的事件发生; process.nextTick(function() { console.log("nextTick"); });

希望本文所述对大家node.js程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

什么是 nodejs 事件循环

Node JS是单线程应用程序,但它通过事件和回调概念,支持并发。 由于Node

JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性。Node

JS使用观察者模式。Node线程保持一个事件循环,每当任何任务得到完成,它触发这标志着该事件侦听器函数执行相应的事件。

事件驱动编程

Node.js大量使用事件,这也是为何Node.js是相当快相对于其他类似的技术。当Node启动其服务器,它可以简单地启动它的变量,声明的函数,然后简单地等待发生的事件。

在事件驱动的应用中,通常主循环监听事件,然后触发回调函数时被检测到这些事件之一。

尽管事件似乎类似于回调。不同之处在于如下事实,当异步函数返回其结果的回调函数被调用的地方作为对观察者模式的事件处理。

监听事件的功能作为观察员。每当一个事件被触发,它的监听函数就开始执行。Node.js具有多个内置通过事件模块和用于将事件绑定和事件侦听,如下

EventEmitter类可用事件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new events.EventEmitter();

以下为事件处理程序绑定使用事件的语法:

// Bind event and even handler as follows

eventEmitter.on('eventName', eventHandler);

我们可以通过编程触发一个事件,如下所示:

// Fire an event

eventEmitter.emit('eventName');

例子

创建一个名为具有以下代码main.js一个js文件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new events.EventEmitter();

// Create an event handler as follows

var connectHandler = function connected() {

console.log('connection succesful.');

// Fire the data_received event

eventEmitter.emit('data_received');

}

// Bind the connection event with the handler

eventEmitter.on('connection', connectHandler);

// Bind the data_received event with the anonymous function

eventEmitter.on('data_received', function(){

console.log('data received succesfully.');

});

// Fire the connection event

eventEmitter.emit('connection');

console.log("Program Ended.");

现在让我们试着运行上面的程序作为检查的输出:

$ mnode main.js

这将产生以下结果:

connection succesful.

data received succesfully.

Program Ended.

浏览器和Node事件循环的区别

事件循环,是 js 中老生常谈的一个话题了,而在浏览器和 Node 中的事件循环执行机制也不相同,浏览器的事件循环是在 HTML5 中定义的规范,而 Node 中则是由 libuv 库实现,不可以混为一谈。

先看一个简单的事件循环笔试题:

function sleep(time) {    let startTime = new Date();    while (new Date() - startTime < time) {}    console.log('<--Next Loop-->');

}

setTimeout(() => {    console.log('timeout1');

    setTimeout(() => {        console.log('timeout3');

        sleep(1000);

    });    new Promise((resolve) => {        console.log('timeout1_promise');

        resolve();

    }).then(() => {        console.log('timeout1_then');

    });

    sleep(1000);

});

     

setTimeout(() => {    console.log('timeout2');

    setTimeout(() => {        console.log('timeout4');

        sleep(1000);

    });    new Promise((resolve) => {        console.log('timeout2_promise');

        resolve();

    }).then(() => {        console.log('timeout2_then');

    });

    sleep(1000);

});

在不同的环境中,输出的结果也是不同的:

  • 浏览器中的输出:

timeout1

timeout1_promise<--Next Loop-->timeout1_then

timeout2

timeout2_promise<--Next Loop-->timeout2_then

timeout3<--Next Loop-->timeout4<--Next Loop-->

  • Node 环境中的输出:

timeout1

timeout1_promise<--Next Loop-->timeout2

timeout2_promise<--Next Loop-->timeout1_then

timeout2_then

timeout3<--Next Loop-->timeout4<--Next Loop-->

接下来我们就看看浏览器和 Node 中时间循环的区别是什么。

1. 任务队列

浏览器环境

浏览器环境下的 异步任务 分为 宏任务(macroTask) 和 微任务(microTask):

  • 宏任务(macroTask):script 中代码、setTimeout、setInterval、I/O、UI render;

  • 微任务(microTask): Promise、Object.observe、MutationObserver。

  • 当满足执行条件时,宏任务(macroTask) 和 微任务(microTask) 会各自被放入对应的队列:宏队列(Macrotask Queue) 和 微队列(Microtask Queue) 中等待执行。

    Node 环境

    在 Node 环境中 任务类型 相对就比浏览器环境下要复杂一些:

  • microTask:微任务;

  • nextTick:process.nextTick;

  • timers:执行满足条件的 setTimeout 、setInterval 回调;

  • I/O callbacks:是否有已完成的 I/O 操作的回调函数,来自上一轮的 poll 残留;

  • poll:等待还没完成的 I/O 事件,会因 timers 和超时时间等结束等待;

  • check:执行 setImmediate 的回调;

  • close callbacks:关闭所有的 closing handles ,一些 onclose 事件;

  • idle/prepare 等等:可忽略。

  • 因此,也就产生了执行事件循环相应的任务队列 Timers Queue、I/O Queue、Check Queue 和 Close Queue。

nodejs事件循环 会阻塞吗

  我们写的所有 js 代码是同一个线程执行的,所以不用考虑线程安全。

事件循环while true是在另一个线程执行的,所以不会阻塞。

事实上负责调度的线程并不止一个,因为很多系统操作并没有异步实现,这些线程会帮我们完成异步的效果。

  Sent from CNodejs for iOS

  

nodejs中,什么是事件循环

Node JS是单线程应用程序,但它通过事件和回调概念,支持并发。 由于Node

JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性。Node

JS使用观察者模式。Node线程保持一个事件循环,每当任何任务得到完成,它触发这标志着该事件侦听器函数执行相应的事件。

事件驱动编程

Node.js大量使用事件,这也是为何Node.js是相当快相对于其他类似的技术。当Node启动其服务器,它可以简单地启动它的变量,声明的函数,然后简单地等待发生的事件。

在事件驱动的应用中,通常主循环监听事件,然后触发回调函数时被检测到这些事件之一。

尽管事件似乎类似于回调。不同之处在于如下事实,当异步函数返回其结果的回调函数被调用的地方作为对观察者模式的事件处理。

监听事件的功能作为观察员。每当一个事件被触发,它的监听函数就开始执行。Node.js具有多个内置通过事件模块和用于将事件绑定和事件侦听,如下

EventEmitter类可用事件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new events.EventEmitter();

以下为事件处理程序绑定使用事件的语法:

// Bind event and even handler as follows

eventEmitter.on('eventName', eventHandler);

我们可以通过编程触发一个事件,如下所示:

// Fire an event

eventEmitter.emit('eventName');

例子

创建一个名为具有以下代码main.js一个js文件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new events.EventEmitter();

// Create an event handler as follows

var connectHandler = function connected() {

console.log('connection succesful.');

// Fire the data_received event

eventEmitter.emit('data_received');

}

// Bind the connection event with the handler

eventEmitter.on('connection', connectHandler);

// Bind the data_received event with the anonymous function

eventEmitter.on('data_received', function(){

console.log('data received succesfully.');

});

// Fire the connection event

eventEmitter.emit('connection');

console.log("Program Ended.");

现在让我们试着运行上面的程序作为检查的输出:

$ mnode main.js

这将产生以下结果:

connection succesful.

data received succesfully.

Program Ended.

什么是事件循环

Node JS是单线程应用程序,但它通过事件和回调概念,支持并发。 由于Node

JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性。Node

JS使用观察者模式。Node线程保持一个事件循环,每当任何任务得到完成,它触发这标志着该事件侦听器函数执行相应的事件。

事件驱动编程

Node.js大量使用事件,这也是为何Node.js是相当快相对于其他类似的技术。当Node启动其服务器,它可以简单地启动它的变量,声明的函数,然后简单地等待发生的事件。

在事件驱动的应用中,通常主循环监听事件,然后触发回调函数时被检测到这些事件之一。

尽管事件似乎类似于回调。不同之处在于如下事实,当异步函数返回其结果的回调函数被调用的地方作为对观察者模式的事件处理。

监听事件的功能作为观察员。每当一个事件被触发,它的监听函数就开始执行。Node.js具有多个内置通过事件模块和用于将事件绑定和事件侦听,如下

EventEmitter类可用事件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new events.EventEmitter();

以下为事件处理程序绑定使用事件的语法:

// Bind event and even handler as follows

eventEmitter.on('eventName', eventHandler);

我们可以通过编程触发一个事件,如下所示:

// Fire an event

eventEmitter.emit('eventName');

例子

创建一个名为具有以下代码main.js一个js文件:

// Import events module

var events = require('events');

// Create an eventEmitter object

var eventEmitter = new events.EventEmitter();

// Create an event handler as follows

var connectHandler = function connected() {

console.log('connection succesful.');

// Fire the data_received event

eventEmitter.emit('data_received');

}

// Bind the connection event with the handler

eventEmitter.on('connection', connectHandler);

// Bind the data_received event with the anonymous function

eventEmitter.on('data_received', function(){

console.log('data received succesfully.');

});

// Fire the connection event

eventEmitter.emit('connection');

console.log("Program Ended.");

现在让我们试着运行上面的程序作为检查的输出:

$ mnode main.js

这将产生以下结果:

connection succesful.

data received succesfully.

Program Ended.

  • 本文相关:
  • node.js中对event loop事件循环的理解与应用实例分析
  • nodejs监控事件循环异常示例详解
  • 浅谈node 异步io和事件循环
  • node.js 事件循环详解及实例
  • 深入理解node.js 事件循环和回调函数
  • node.js事件循环(event loop)和线程池详解
  • 我的node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
  • node.js笔记之process模块解读
  • node.js中process模块常用的属性和方法
  • nodejs实现图片上传代码(express)
  • 从零开始学习node.js系列教程四:多页面实现数学运算的client端和
  • node.js使用gm拼装sprite图片
  • 利用pm2部署多个node.js项目的配置教程
  • node.js创建web、tcp服务器
  • node.js中创建和管理外部进程详解
  • 使用socket.io实现简单聊天室案例
  • node.js中fs文件系统模块的使用方法实例详解
  • node.js实现数据推送
  • iphone手机上搭建nodejs服务器步骤方法
  • 什么是 nodejs 事件循环
  • 浏览器和Node事件循环的区别
  • nodejs事件循环 会阻塞吗
  • nodejs中,什么是事件循环
  • 什么是事件循环
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved