Nodejs随笔(三):全局对象之process

process是全局对象,在任何地方都可以访问,而且它是EventEmitter的一个实例(关于EventEmitter后面会提到)。

process对象对一些标准的输入输出流进行了封装,如stdin(标准输入)、stdout(标准输出)和stderr(标准错误输出)。其中,stdin和stdout支持异步操作,前者可读,后者可写。stderr是一个同步可阻塞流。

使用stdin和stdout来读取和写入数据:

process.stdin.setEncoding(‘utf-8‘);

process.stdin.on(‘readable‘, function(){
    var chunk = process.stdin.read();
    if(chunk !== null){
        process.stdout.write(‘data: ‘+ chunk);
    }
});

process.stdin.on(‘end‘, function(){
    process.stdout.write(‘end‘);
});

  作为流,process.stdin可以在旧模式下使用。为了兼容node v0.10以前的版本。在旧模式喜爱使用stdin必须调用process.stdin.resume()。注意如果调用了process.stdin.resume() stdin将转为旧模式。

process.stdin.resume();

process.stdin.on(‘data‘, function(chunk){
    process.stdout.write(‘data: ‘ + chunk);
});

上述两者的结果都是:

[email protected]:~/nodejs-workspace/03process$ node stdin.js
adfasfas
data: adfasfas
asdfasf
data: asdfasf
daddddddddddddddddddddd
data: daddddddddddddddddddddd[email protected]:~/nodejs-workspace/03process$    #按Ctrl + D时显式end

process总包含许多属性和方法可以返回当前环境信息,可以查看API:

> process.version    #Node版本信息
‘v0.12.1‘
> process.execPath    #返回当前Node应用程序的执行路径
‘/usr/local/bin/node‘
> process.platform    #服务器平台信息
‘linux‘
> process.memoryUsage()    #内存使用情况
{ rss: 18534400, heapTotal: 11803648, heapUsed: 6462296 }
> process.pid        #当前程序的进程号
4058
> process.arch      #架构信息
‘x64‘
> process.uptime()  #运行时间
1782.254
> 

下面简单说一下nextTick()方法,详细请看文末参考:

process.nextTick()将一个回调函数挂载到Node程序的时间循环机制中,在下一个事件循环发生时调用该函数。

示例1:

[email protected]:~/nodejs-workspace/03process$ cat nextTick.js
console.log(‘start‘);
process.nextTick(function() {
    console.log(‘nextTick callback‘);
});
console.log(‘scheduled‘);
// Output:
// start
// scheduled
// nextTick callback

上述程序的运行结果为:

[email protected]:~/nodejs-workspace/03process$ node nextTick.js
start
scheduled
nextTick callback

示例2:

[email protected]:~/nodejs-workspace/03process$ cat nextTick02.js
function foo(options){
    console.log(‘foo function‘);
}
process.nextTick(foo);
console.error(‘bar‘);

上述程序的运行结果为:你可以发现bar比‘foo function‘提前打印了出来.也就是说我们已经将调用foo()推迟到下一个事件循环中.

[email protected]:~/nodejs-workspace/03process$ node nextTick02.js
bar
foo function

同样我们采用setTimeout()同样可以达到上述效果。

[email protected]:~/nodejs-workspace/03process$ cat setTimeoutCompareNextTick02.js
function foo(options){
    console.log(‘foo function‘);
}
setTimeout(foo, 0);
console.error(‘bar‘);

结果同上:

[email protected]:~/nodejs-workspace/03process$ node setTimeoutCompareNextTick02.js
bar
foo function

但是process.nextTick()相对setTimeout()来说是高效的.

More precisely, process.nextTick() defers the function until a completely new stack. You can call as many functions as you want in the current stack. The function that called nextTick has to return, as well as its parent, all the way up to the root of the stack. Then when the event loop is looking for a new event to execute, your nextTick‘ed function will be there in the event queue and execute on a whole new stack.

参考:http://howtonode.org/understanding-process-next-tick

时间: 2024-11-16 20:55:02

Nodejs随笔(三):全局对象之process的相关文章

nodejs学习笔记 -- 全局对象与全局变量

全局对象 在浏览器Javascript中,window是全局对象,而Node.js中全局对象是global,所有全局变量(除了global本身以外)都是global对象的属性. 在Node.js中,我们可以直接访问到global的属性,而不需要在应用中包含它. 全局变量 global 最根本的作用是作为全局变量的宿主.按照 ECMAScript 的定义,满足以下条 件的变量是全局变量: 1.在最外层定义的变量: 2.全局对象的属性: 3.隐式定义的变量(未定义直接赋值的变量). 定义一个全局变量

Node.js API —— Global Objects(全局对象)

// 说明 Node API 版本为 v0.10.31.    中文参考:http://blog.sina.com.cn/oleoneoy 本段为博主注解. 目录 ● 全局对象    ○ global    ○ process    ○ console    ○ Class: Buffer    ○ require()        ■ require.resolve()         ■ require.cache        ■ require.extensions    ○ __fil

Nodejs随笔(三):全局对象之global

首先,进入node REPL: [email protected]:~$ node > 查看global对象,发现其他全局对象(包括Buffer.require对象)以及全局方法都包含在global对象接口中: > console.log(global); { global: [Circular], process: { title: 'node', version: 'v0.12.1', moduleLoadList: [ 'Binding contextify', 'Binding nat

nodejs学习三 process对象

rocess对象,我说的是对象.这个对象包含的方法和属性非常的多,它向我们打开了一个通往Node.js的大门,让我们队Node.js有更多的了解. 你知道安装的Node.js的版本吗? 你知道你的Node安装在上面平台下吗? 你知道你的Node可执行文件的绝对路径吗? 你想得到你env环境变量内容吗? 上面输入的信息你可以更具体点,比如console.log(process.env.OS) 你想得到命令行上的参数吗? 好了,下面我们来写一个js.命名process.js 在命令行上运行它: 我们

nodejs基础 -- 全局对象

全局对象:javascript中的一个特殊对象 全局变量:该特殊对象及其所有属性 该对象为:在浏览器javascript中,为window:在nodejs中,为global(所有全局变量都是global对象的属性) 全局对象与全局变量 global最根本的作用就是作为全局变量的宿主.满足以下条件的变量是全局变量: 在最外层定义的变量: 全局对象的属性: 隐式定义的变量(未定义直接赋值的变量). 当定义一个全局变量的时候,这个变量同时会变成全局对象的属性,反之亦然. 注: 1.在nodejs中不可

大熊君大话NodeJS之------Global Objects全局对象

一,开篇分析 在上个章节中我们学习了NodeJS的基础理论知识,对于这些理论知识来说理解是至关重要的,在后续的章节中,我们会对照着官方文档逐步学习里面的各部分模块,好了该是本文主角登台亮相的时候了,Global  让我们来看一下官方的定义: Global Objects全局对象 These objects are available in all modules. Some of these objects aren't actually in the global scope but in t

nodejs 全局对象

1. 全局对象console的五个方法: log   dir    time  timeEnd  error 2. 在前端中全局对象Window中定义了consle这个对象 3. 在nodejs中全局对象是global,在global中定义了console. 4. setInterval也是global中定义的全局对象 5. setTimeout也是global中定义的全局对象 6. __dirname 也是全局对象,表示当前文件所在的路径 7. __filename也是全局对象,表示当前文件所

7:Node.js 全局对象

原文出自:http://www.w3cschool.cc/nodejs/nodejs-global-object.html Node.js 全局对象 JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可 以在程序的任何地方访问,即全局变量. 在浏览器JavaScript 中,通常window 是全局对象, 而Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性. 我们在Node

Node.js:get/post请求、全局对象、工具模块

一.GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交.表单提交到服务器一般都使用 GET/POST 请求. 1.获取GET请求内容 由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数.node.js 中 url 模块中的 parse 函数提供了这个功能. var http = require('http'); var url = require('url'); var util =