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);
});
上述两者的结果都是:
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的更多相关文章
- nodejs 全局变量和全局对象
1.全局对象 所有模块都可以调用 1)global:表示Node所在的全局环境,类似于浏览器中的window对象. 2)process:指向Node内置的process模块,允许开发者与当前进程互动. ...
- nodejs(三) --- nodejs进程与子进程
嗯,对于node的学习还远远不够,这里先做一个简单的api的记录,后续深入学习. 第一部分:nodejs中的全局对象之process进程对象 在node中的全局对象是global,相当于浏览器中的wi ...
- nodejs 全局对象 global
nodejs中有一个全局对象 global,所有的全局变量都是global对象的属性,glabal最根本的作用是作为全局变量的宿主, 全局变量: 1 在最外层定义的变量 2 全局对象的属性 3 隐式定 ...
- 简述JavaScript全局对象
全局对象是JavaScript中非常重要的一类对象,它作为程序顶层(程序最顶端,不包括在任何函数之内)的上下文存在,JavaScript中的全局属性.全局函数都是通过全局对象来提供给程序的,比如 全局 ...
- Nodejs随笔(三):全局对象之global
首先,进入node REPL: mesogene@mesogene-team:~$ node > 查看global对象,发现其他全局对象(包括Buffer.require对象)以及全局方法都包含 ...
- NodeJS API Process全局对象
Process 全局对象,可以在代码中的任何位置访问此对象,使用process对象可以截获进程的异常.退出等事件,也可以获取进程的当前目录.环境变量.内存占用等信息,还可以执行进程退出.工作目录切换等 ...
- nodejs全局对象简析
Global:全局变量 定时器.控制台输出.事件 模块化相关的一些全局变量 path/url相关的一些全局变量 编码相关的 buffer:缓存(简单介绍) Process:进程(重点解析) 一.Glo ...
- 大熊君大话NodeJS之------Global Objects全局对象
一,开篇分析 在上个章节中我们学习了NodeJS的基础理论知识,对于这些理论知识来说理解是至关重要的,在后续的章节中,我们会对照着官方文档逐步学习里面的各部分模块,好了该是本文主角登台亮相的时候了,G ...
- nodejs基础 -- 全局对象
全局对象:javascript中的一个特殊对象 全局变量:该特殊对象及其所有属性 该对象为:在浏览器javascript中,为window:在nodejs中,为global(所有全局变量都是globa ...
随机推荐
- JavaScript关闭浏览器
(*^__^*) 嘻嘻……,以前我找关闭浏览器选项卡的代码找不到,我还以为要用后台代码关呢?今天发现只要简单2句JavaScipt代码就可以了.看来很多东西还是在于平时的积累啊的说! 模仿延儿的口气了 ...
- ASP.NET MVC学习之路由篇
约束路由 上面我们有一个{id}用来捕获参数的,但是你也发现了它可以捕捉任何字符串等等,但是我们有时需要限制它,比如让它只能输入数字,那么我们就可以使用正则表达式去约束它. 如下修改RouteConf ...
- javascript 高级程序设计学习笔记(面向对象的程序设计) 2
在调用构造函数时会为实例添加一个指向最初原型的指针,我们可以随时为原型添加属性和方法,并且能在实例中体现出来,但如果是重新了原型对象,那就会切断构造函数与最初原型的联系. function Dog ( ...
- Spring Annotation注解进行aop的学习
使用Maven管理项目,pom文件为: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- study notes: high performance linux server programming
1:linux网络API分为:socker地址API,socker基础API,网络信息API 1,socker地址API:包含IP地址和端口(ip, port).表示TCP通信的一端. 2,socke ...
- (原)STL中vector的疑问
以前基本上没有用过STL,当然包括里面的vector.今天试验了一下. 主要看了这个网址: http://blog.csdn.net/phoebin/article/details/3864590 代 ...
- 基于Cookie跨域的单点登录问题
由于项目中,需要用的单点登录,主要的思路是:系统1:用户名密码-->写入Cookie-->其他系统读取Cookie. 1.在同一个服务器下的Cookie共享 @Component(&quo ...
- Linux下CURL常用命令
下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中: -o:将文件保存为命令行中指定的文件 ...
- [汇编语言]-第五章[bx]和loop指令
1- [bx]和内存单元的描述 [0]表示内存单元, 他的偏移地址为0 mov ax,[0] 将一个内存单元的内容送入到ax.这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在d ...
- 字符串水题(hdoj1049)
Problem Description Password security is a tricky thing. Users prefer simple passwords that are easy ...