Я использую вызов функции fwrite()
для записи данных в канал в Linux.
Ранее fwrite()
неоднократно вызывался для небольших фрагментов данных (в среднем по 20 байт ), а буферизация была оставлена для fwrite()
. strace процесса показал, что за один раз записывается 4096 байт данных.
Оказалось, что этот процесс написания был узким местом в моей программе. Поэтому я решил буферизовать данные в своем коде в блоки по 64 КБ, а затем записывать весь блок за раз, используя fwrite()
. Я использовал setvbuf()
, чтобы установить указатель FILE *на «Без буферизации».
Повышение производительности оказалось не таким значительным, как я ожидал.
Что еще более важно, вывод strace
показал, что данные по-прежнему записываются по 4096 байт за раз. Может кто-нибудь объяснить мне это поведение? Если я звоню fwrite()
с 64 КБ данных, почему он записывает только 4096 байт за раз?
Есть ли альтернатива fwrite()
для записи данных в конвейер с использованием указателя FILE *?