O problema geralmente é o buffer de saída do seu programa, ou mais precisamente, por uma biblioteca de E / S ou tempo de execução que seu programa usa. Especificamente, buffer de linha.
O IO sem buffer é muito menos eficiente, e é por isso que não é usado por padrão.
As linguagens de programação geralmente têm uma maneira de especificar a saída sem buffer. Desde que geralmente depende do que STDOUT está conectado a ele também é afetado por configurações de ambiente do sistema operacional.
Veja também stdbuf