Я просто планировал переписать некоторый код Python, в котором я опрашивал файл на наличие изменений. Я хотел переписать его как упражнение для asyncio
, и концептуальная идея заключалась в том, чтобы сделать неблокирующее чтение файла, которое даст результат. Как только данные станут доступны, цикл обработки событий продолжит выполнение сопрограммы.
Затем я обнаружил, что асинхронные операции с файлами — это не то, что делают люди. ref.
Но я не мог понять, какова мотивация такого поведения и чем оно отличается от сокетов.
Пример сокета:
Чтение сокета выполняется сопрограммой до тех пор, пока данные не будут готовы. Готово означает, что оно фактически прибыло в недетерминированное время откуда-то из Интернета.
Почему бы не также для чтения файла:
Чтение файла выполняется сопрограммой до тех пор, пока данные не будут готовы. Готово означает, что оно действительно прибыло в недетерминированное время откуда-то с жесткого диска компьютера.
Является ли это унаследованным от устаревшего кода поведением, которое достаточно хорошо работает с блокирующими вызовами?
Это как-то связано с файлами символов и блоков?
Как насчет файлов символьных устройств, скажем, файла, представляющего соединение UART? Будет ли здесь также применяться безфайловый ввод-вывод?