2016-09-15 4 views
0

Если несколько процессов одновременно записывают в stdout, нет ничего, что могло бы остановить чередование потоков. Это то, что я имею в виду под столкновением. enter image description here В соответствии с комментариями в node source должно быть возможно избежать столкновений в process.stdout. Я пробовал это, и это помогает, но у меня все еще возникают столкновения. Без флага writing я получаю столкновений каждый раз, а флаг падает до 40%. Все еще очень важно.столкновений stdout на узле

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.

узел v5.12.0 для Windows 10

Эта проблема возникает только при использовании консоли Run в WebStorm, выход не перепутать при работе узла в PowerShell или из ЦМД. Я поднял ticket для этого на реактивных мозгах.

+0

Можете ли вы определить, что такое столкновение? – robertklep

+0

@robertklep, вы видели [The Fly] (https://en.wikipedia.org/wiki/The_Fly_ (1958_film))? –

+0

Ха-ха, я понимаю: D Итак, вы получаете чередование символов между различными строками журнала? Или чередование строк, где вы регистрируете несколько строк с одним регистратором, и они чередуются с другим регистратором? – robertklep

ответ

1

Если у вас несколько авторов в тот же поток, я не думаю, что вы получите чередование. Даже если один писатель регистрирует несколько строк подряд, эти строки буферизуются (если происходит буферизация) в правильном порядке, а когда другой писатель записывает свои строки, они будут добавлены в буфер, за предыдущим .

Чередование может произойти, если у вас есть писатели писать на другой поток, как один письма к stdout, а другой stderr. В какой-то момент, когда буфер вывода одного потока заполняется, он становится красным на консоли, независимо от каких-либо других потоков, которые также могут записываться на консоль.

Смежные вопросы