节点上的标准输出冲突
stdout collisions on node
如果多个进程同时写入标准输出,则没有什么可以阻止流交错。这就是我所说的碰撞。
根据node source中的评论,应该可以避免process.stdout
中的碰撞。我试过了,它有帮助,但我仍然遇到碰撞。没有 writing
标志,我每次都会发生碰撞,有了这个标志,它会下降到大约 40%。还是很有意义的。
page.on('onConsoleMessage', function log(message) {
var writing = process.stdout._writableState.writing
|| process.stdout._writableState.bufferProcessing
|| process.stdout.bufferSize ;
if(writing)
process.nextTick(message => log(message));
else
process.stdout.write('-> ' + message + '\n')
});
在 process.stdout
上避免碰撞的最佳方法是什么?
以上例程与Winston竞争stdout
。
node v5.12.0
Windows10
这个问题只发生在webstorm中使用运行控制台时,在powershell或cmd中使用运行节点时输出不会混淆。我在 jetbrains 上为此提出了 ticket。
如果您有多个作者到同一个流,我认为您不会交错。即使一个 writer 连续记录多行,这些行也会以正确的顺序被缓冲(如果正在缓冲),当另一个 writer 记录它的行时,它们将被附加到缓冲区,在之前的后面记录行。
交错 可以 当您有写入者写入不同的流时发生,例如一个写入 stdout
而另一个写入 stderr
。在某个时候,当一个流的输出缓冲区填满时,它会被刷新到控制台,而不管任何其他流也可能正在写入控制台。
如果多个进程同时写入标准输出,则没有什么可以阻止流交错。这就是我所说的碰撞。
process.stdout
中的碰撞。我试过了,它有帮助,但我仍然遇到碰撞。没有 writing
标志,我每次都会发生碰撞,有了这个标志,它会下降到大约 40%。还是很有意义的。
page.on('onConsoleMessage', function log(message) {
var writing = process.stdout._writableState.writing
|| process.stdout._writableState.bufferProcessing
|| process.stdout.bufferSize ;
if(writing)
process.nextTick(message => log(message));
else
process.stdout.write('-> ' + message + '\n')
});
在 process.stdout
上避免碰撞的最佳方法是什么?
以上例程与Winston竞争stdout
。
node v5.12.0 Windows10
这个问题只发生在webstorm中使用运行控制台时,在powershell或cmd中使用运行节点时输出不会混淆。我在 jetbrains 上为此提出了 ticket。
如果您有多个作者到同一个流,我认为您不会交错。即使一个 writer 连续记录多行,这些行也会以正确的顺序被缓冲(如果正在缓冲),当另一个 writer 记录它的行时,它们将被附加到缓冲区,在之前的后面记录行。
交错 可以 当您有写入者写入不同的流时发生,例如一个写入 stdout
而另一个写入 stderr
。在某个时候,当一个流的输出缓冲区填满时,它会被刷新到控制台,而不管任何其他流也可能正在写入控制台。