我们首先要知道Nodejs中实现consolelog的原理
function log() { processstdoutwrite( utilformatapply(this, arguments); )}
那么这篇文章就等同于问processstdoutwrite是同步还是异步的?
其实官方文档已经给出了答案,A note on process I/O
processstdout和processstderr是根据系统环境来判定的同步还是异步的
Files: synchronous on Windows and Linux
TTYs (Terminals): asynchronous on Windows, synchronous on Unix
Pipes (and sockets): synchronous on Windows, asynchronous on Unix
那么consolelog也是根据系统环境来判定同步还是异步的。
那么这个同步还是异步对我们程序有影响吗?
我们知道同步写入阻止事件循环,直到写入完成为止。这可以在输出到一个文件的情况下这几乎是瞬间完成的,但系统高负载下,比如管道不是在接收末端读取,或缓慢的终端或文件系统,其可能的事件循环受阻的次数足够多,足够长的时间,有严重的负面影响。在向交互式终端会话写入时,这可能不是问题,但在对流程输出流进行生产日志记录时,考虑这一点尤为重要。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)