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 ...
随机推荐
- Android设置背景
一.设置图片背景 首先你先将一个的背景图片存入工程中res/drawble(当然drawble-hdpi.drawble-mdpi.drawble-ldpi中一个或者几个文件夹都可)文件夹中.假如我存 ...
- javascript模式——Decorator
Decorator 模式是一种结构型模式,他意在促进代码的复用,是塑造子类的一个方式. 这种想法是基于,新增的属性,对于对象来说不是必须的基本功能.我们为特殊的对象添加自己的方法,而不是重新创建一个类 ...
- 一些实用的CSS Media Query代码片段,个人采集
CSS3的出现让响应式Web设计变得简单,CSS3提供了强大的media queries,允许你针对不同的条件设置不同的样式,可以在不修改页面内容的情况下,为不同设备提供不同的样式效果. 以下是一些C ...
- Cisco密码恢复
1.利用超级终端连接路由器,重新启动路由器,按CTRL+BREAK进入ROM监控模式 注:配置寄存器(2B)第六位控制是否读取NVRAM中的配置文件 2.修改配置寄存器:2600系列:1): con ...
- Redis与Scrapy
Redis与Scrapy Redis与Scrapy Redis is an open source, BSD licensed, advanced key-value cache and store. ...
- 关于MySQL性能的比较
需求:在传递一组职位编号的时候,需要统计该职位的 当天的投递情况 和 有历史记录以来总的投递量 解决方案一: 每次都进行一次数据库查询,遍历职位id,再根据职位id去查询相应时间内的投递量 /** * ...
- Oracle EBS-SQL (PO-17):检查供货比例不为100%.sql
select * from apps.MRP_SOURCING_RULES msrwhere organization_id=X. a ...
- Oracle 索引扫描的4种类型
根据索引的类型与where限制条件的不同,有4种类型的Oracle索引扫描: 3,4可归一种 (1) 索引唯一扫描(index uniquescan) (2) 索引范围扫描(index range s ...
- 【POJ 3669 Meteor Shower】简单BFS
流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封 ...
- poj 1094 Sorting It All Out_拓扑排序
题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...