2015-05-02 12 views
21

Sto leggendo il codice sorgente per god Un framework di monitoraggio dei processi in Ruby e ho trovato questo STDOUT.sync = true. Non ho mai visto qualcosa di simile prima. Per favore, spieghi cosa fa, qual è il punto di questa linea?Cosa significa STDOUT.sync = true?

Grazie in anticipo.

risposta

25

Normalmente puts non scrive immediatamente su STDOUT, ma memorizza le stringhe internamente e scrive l'output in blocchi più grandi. Questo perché le operazioni di I/O sono lente e in genere ha più senso evitare di scrivere immediatamente ogni singolo carattere sulla console.

Questo comportamento causa problemi in determinate situazioni. Immagina di voler costruire una barra di avanzamento (esegui un ciclo che emette punti singoli tra calcoli estesi). Con il buffering, il risultato potrebbe essere che non c'è alcun output per un po 'e poi improvvisamente vengono stampati più punti contemporaneamente.

Per evitare questo comportamento e invece scrivere immediatamente a STDOUT è possibile impostare STDOUT in modalità di sincronizzazione in questo modo:

STDOUT.sync = true 

Dal docs:

Quando la modalità di sincronizzazione è vero, tutti gli output è immediatamente scaricato dal sistema operativo sottostante e non viene memorizzato nel buffer internamente.

+0

l'esempio con punti mi ha ricordato le barre di avanzamento. – SuperManEver