Пишу на Си не суть важно что, но это что-то читает блочное устройство в цикле по 512 байт за раз (по размеру блока). Т.к. блочное устройство — SSD, скорость чтения большая (~300–400 МиБ в секунду, подтверждается через IO_RATE в htop'е).
Допустим, я хочу каждую секунду выводить значение текущей скорости чтения. Раз в 1000 циклов чтения проверяю, прошла ли секунда, если да, то пишу статистику в консоль через printf.
Проблема в том, что это не работает. Точнее, работает, но с задержкой в 7–8 секунд. Если инфу выводить не через printf, а форматить вручную и писать через write(STDOUT_FILENO, buf, strlen(buf)), то всё выводится, как и нужно. Если после printf делать fflush(stdout), то тоже работает.
Собственно, два вопроса:
- правильно ли я понимаю, что это из-за буферизации вывода через printf?
- связано ли это с 12309?