栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

node.js的console.log是异步的吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

node.js的console.log是异步的吗?

更新: 从Node 0.6开始,此帖子已过时,因为stdout 现在是 同步的

好吧,让我们看看

console.log
实际是什么。

首先,它是控制台模块的一部分:

exports.log = function() {  process.stdout.write(format.apply(this, arguments) + 'n');};

因此,它只是进行一些格式化并写入

process.stdout
,到目前为止还没有异步。

process.stdout
是在启动时定义的吸气剂,它是惰性初始化的,我添加了一些注释来解释事情:

.... pre here...process.__defineGetter__('stdout', function() {  if (stdout) return stdout;      // only initialize it once  /// many requires here ...  if (binding.isatty(fd)) {       // a terminal? great!    stdout = new tty.WriteStream(fd);  } else if (binding.isStdoutBlocking()) {   // a file?    stdout = new fs.WriteStream(null, {fd: fd});  } else {    stdout = new net.Stream(fd);  // a stream?  // For example: node foo.js > out.txt    stdout.readable = false;  }  return stdout;});

在使用TTY和UNIX的情况下,我们到这里结束,这件事是从套接字继承的。因此,节点基本上要做的就是将数据推送到套接字上,然后由终端负责其余的工作。

让我们测试一下!

var data = '111111111111111111111111111111111111111111111111111';for(var i = 0, l = 12; i < l; i++) {    data += data; // warning! gets very large, very quick}var start = Date.now();console.log(data);console.log('wrote %d bytes in %dms', data.length, Date.now() - start);

结果

....a lot of ones....1111111111111111wrote 208896 bytes in 17msreal    0m0.969suser    0m0.068ssys  0m0.012s

终端需要大约1秒钟才能打印出套接字内容,而节点仅需要17毫秒即可将数据推送到终端。

流情况也是如此,文件情况也将异步处理。

因此, 是的, Node.js遵守其非阻塞承诺。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号