UNIX буферизованный и небуферизованный ввод / вывод
В чем разница между небуферизованным вводом / выводом и стандартным вводом / выводом? Я знаю, что с помощью read(), write(), close() небуферизованный ввод-вывод. Printf и получает буферизованный ввод-вывод. Я также знаю, что лучше использовать буферизованный ввод-вывод для больших транзакций. Я просто не знаю причину почему. И что означает термин "буферизованный" в этом контексте?
1 ответ
Небуферизованный ввод / вывод просто означает, что при чтении или записи не используется буфер. Обычно, когда мы используем системные вызовы, такие как read() и write(), они читают и записывают char за char и могут привести к значительному снижению производительности. Так что для больших дат предпочтительнее чтение / запись высокого уровня или просто буферизованный ввод / вывод. Буферизация просто означает, что мы имеем дело не с одним символом, а с блоком символов, поэтому иногда он также известен как блок ввода / вывода. Обычно в Unix, когда мы используем высокоуровневые функции чтения / записи, они извлекают / хранят данные с заданным размером блока и помещают их в буферный кеш, и из этого буферного кеша эти функции ввода / вывода получают желаемый объем данных.