Насколько я понимаю, асинхронный ввод-вывод заключается в том, что вы получаете уведомление, когда оно выполняется через какое-то прерывание, поэтому вы можете выполнить больше операций ввода-вывода в этот момент. С буферизованным вводом / выводом вы делаете это и забываете об этом, вы никогда больше не слышите об этом конкретном вводе / выводе.
По крайней мере, так обстоят дела с огромными интеллектуальными дисковыми массивами, с которыми мы имеем дело.
Идея асинхронного ввода-вывода состоит в том, что вы начинаете ввод-вывод и возвращаетесь к другим действиям. Затем, когда ввод-вывод завершен, вы получаете уведомление и можете сделать больше ввода-вывода - другими словами, вы не дожидаетесь его завершения.
Специально для случая синхронного чтения: вы запрашиваете некоторый ввод, а затем ждете, пока он будет считан с устройства. Буферизация включает в себя только чтение больше, чем нужно, поэтому оно доступно при следующем чтении, не выходя на устройство, чтобы получить его.
Async читает, вы просто запускаете процесс, чтобы читать, затем вы уходите и делаете что-то еще, пока это происходит. В результате опроса или прерывания вы позднее обнаружите, что чтение завершено и данные доступны для использования.
Что касается записей, я не уверен, что вижу преимущество одного над другим. Буферизованные записи синхронизации вернутся почти сразу, если буфер не заполнен (это единственный раз, когда асинхронная запись может иметь преимущество).