▲ | calibas 10 hours ago | |||||||
Buffers are there for good reason, it's extremely slow (relatively speaking) to print output on a screen compared to just writing it to a buffer. Printing something character-by-character is incredibly inefficient. This is an old problem, I encounter it often when working with UART, and there's a variety of possible solutions: Use a special character, like a new line, to signal the end of output (line-based). Use a length-based approach, such as waiting for 8KB of data. Use a time-based approach, and print the output every X milliseconds. Each approach has its own strengths and weaknesses, depends upon the application which one works best. I believe the article is incorrect when mentioning certain programs that don't use buffering, they just don't use an obvious length-based approach. | ||||||||
▲ | qazxcvbnmlp 9 hours ago | parent | next [-] | |||||||
Having a layer or two above the interface aware of the constraint works the best (when possible). Line based approach does this but requires agreement on the character (new line). | ||||||||
| ||||||||
▲ | PhilipRoman 10 hours ago | parent | prev [-] | |||||||
Also, it's not just the work needed to actually handle the write on the backend - even just making that many syscalls to /dev/null can kill your performance. |