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);
});

上述两者的结果都是:

mesogene@mesogene-team:~/nodejs-workspace/03process$ node stdin.js
adfasfas
data: adfasfas
asdfasf
data: asdfasf
daddddddddddddddddddddd
data: daddddddddddddddddddddd
endmesogene@mesogene-team:~/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: , heapTotal: , heapUsed: }
> process.pid        #当前程序的进程号 > process.arch      #架构信息
'x64'
> process.uptime()  #运行时间
1782.254
>

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

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

示例1:

mesogene@mesogene-team:~/nodejs-workspace/03process$ cat nextTick.js
console.log('start');
process.nextTick(function() {
console.log('nextTick callback');
});
console.log('scheduled');
// Output:
// start
// scheduled
// nextTick callback

上述程序的运行结果为:

mesogene@mesogene-team:~/nodejs-workspace/03process$ node nextTick.js
start
scheduled
nextTick callback

示例2:

mesogene@mesogene-team:~/nodejs-workspace/03process$ cat nextTick02.js
function foo(options){
console.log('foo function');
}
process.nextTick(foo);
console.error('bar');

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

mesogene@mesogene-team:~/nodejs-workspace/03process$ node nextTick02.js
bar
foo function

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

mesogene@mesogene-team:~/nodejs-workspace/03process$ cat setTimeoutCompareNextTick02.js
function foo(options){
console.log('foo function');
}
setTimeout(foo, 0);
console.error('bar');

结果同上:

mesogene@mesogene-team:~/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

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

  1. nodejs 全局变量和全局对象

    1.全局对象 所有模块都可以调用 1)global:表示Node所在的全局环境,类似于浏览器中的window对象. 2)process:指向Node内置的process模块,允许开发者与当前进程互动. ...

  2. nodejs(三) --- nodejs进程与子进程

    嗯,对于node的学习还远远不够,这里先做一个简单的api的记录,后续深入学习. 第一部分:nodejs中的全局对象之process进程对象 在node中的全局对象是global,相当于浏览器中的wi ...

  3. nodejs 全局对象 global

    nodejs中有一个全局对象 global,所有的全局变量都是global对象的属性,glabal最根本的作用是作为全局变量的宿主, 全局变量: 1 在最外层定义的变量 2 全局对象的属性 3 隐式定 ...

  4. 简述JavaScript全局对象

    全局对象是JavaScript中非常重要的一类对象,它作为程序顶层(程序最顶端,不包括在任何函数之内)的上下文存在,JavaScript中的全局属性.全局函数都是通过全局对象来提供给程序的,比如 全局 ...

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

    首先,进入node REPL: mesogene@mesogene-team:~$ node > 查看global对象,发现其他全局对象(包括Buffer.require对象)以及全局方法都包含 ...

  6. NodeJS API Process全局对象

    Process 全局对象,可以在代码中的任何位置访问此对象,使用process对象可以截获进程的异常.退出等事件,也可以获取进程的当前目录.环境变量.内存占用等信息,还可以执行进程退出.工作目录切换等 ...

  7. nodejs全局对象简析

    Global:全局变量 定时器.控制台输出.事件 模块化相关的一些全局变量 path/url相关的一些全局变量 编码相关的 buffer:缓存(简单介绍) Process:进程(重点解析) 一.Glo ...

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

    一,开篇分析 在上个章节中我们学习了NodeJS的基础理论知识,对于这些理论知识来说理解是至关重要的,在后续的章节中,我们会对照着官方文档逐步学习里面的各部分模块,好了该是本文主角登台亮相的时候了,G ...

  9. nodejs基础 -- 全局对象

    全局对象:javascript中的一个特殊对象 全局变量:该特殊对象及其所有属性 该对象为:在浏览器javascript中,为window:在nodejs中,为global(所有全局变量都是globa ...

随机推荐

  1. jquery中this与$this的区别

    来源:http://www.jb51.net/article/19738.htm jQuery中this与$(this)的区别 $("#textbox").hover( funct ...

  2. flex与js相互调用

    1.flex调用js方法 调用方法例如:ExternalInterface.call("UploadComplete",oldName,uidName,_dir+"/&q ...

  3. 输出jq对象

    console.log($()); 效果截图:

  4. 纯Html+Ajax和JSP两者对比的个人理解

    最近写个人web,用jsp+servlet做,突然想到一个问题:html+ajax似乎和jsp实现效果一样:那么,两者到底有什么区别呢? 这里参考老猿的一段话: 全站ajax会维护大量的js代码,如何 ...

  5. BestCoder 2nd Anniversary 1002 Arrange

    排除所有不符合条件后根据当前位置上下界计算, 由于前面取的数肯定在之后的区间内,所以去掉已取的个数即可. #include <iostream> #include <cstdio&g ...

  6. jquery中 append 和appendto的区别

    1. append(content)方法 方法作用:向每个匹配的元素内部追加内容. 参数介绍:content (<Content>): 要追加到目标中的内容. 用法示例: HTML代码为& ...

  7. Android studio checkstyle 使用

    首先要安装CheckStyle-IDEA插件,官网:https://plugins.jetbrains.com/plugin/1065 打开Android studio进入设置->Plugins ...

  8. Python zxing 库解析(条形码二维码识别)

    各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...

  9. hdu 4906 3-idiots fft

    题目链接 n个火柴棍取3个, 问能组成三角形的概率是多少. kuangbin大神的博客写的很详细了..http://www.cnblogs.com/kuangbin/archive/2013/07/2 ...

  10. Python httplib学习

    httplib是python中http协议的客户端实现,可以使用该模块与HTTP服务器进行交互. 如示例1: import httplib url = "www.126.com"c ...