Может ли обычное чтение файлов получить пользу от неблокирующего ввода-вывода? - PullRequest
5 голосов
/ 10 апреля 2011

Мне не кажется, и я нашел ссылку , которая подтверждает мое мнение .Что ты думаешь?

Ответы [ 3 ]

7 голосов
/ 10 апреля 2011

Содержание размещенной вами ссылки является правильным.Обычный файловый сокет, открытый в неблокирующем режиме, всегда будет «готов» для чтения;когда вы на самом деле пытаетесь прочитать его, блокировка (или, точнее, как указывает ваш источник, спящий режим) будет происходить до тех пор, пока операция не будет успешной.

В любом случае, я думаю, что вашему источнику нужны некоторые успокоительные средства.Один злой человек, то есть.

4 голосов
/ 09 февраля 2012

Последние несколько часов я довольно много копался в этом и могу подтвердить, что автор ссылки, которую вы цитировали, прав.Тем не менее, похоже, что «лучше» (используя этот термин очень свободно) поддержка неблокирующего ввода-вывода для обычных файлов в собственном ядре Linux для v2.6 +.Пакет "libaio" содержит библиотеку, которая предоставляет функциональные возможности, предлагаемые ядром, но в нем есть некоторые предостережения о различных типах файловых систем, которые поддерживаются, и он не переносим ни на что, кроме Linux 2.6 +.

А вот еще одна хорошая статья на эту тему.

1 голос
/ 28 апреля 2011

Вы правы, что неблокирующий режим не имеет преимуществ для обычных файлов и не разрешен. Было бы неплохо, если бы был установлен вторичный флаг, который мог бы быть установлен вместе с O_NONBLOCK, чтобы изменить это, но из-за того, как работают кэш и виртуальная память, определить, что правильно «неблокировать», непросто "поведение для обычных файлов будет означать. Конечно, будут условия гонки, если вы не позволите программам блокировать память, связанную с файлом. (Фактически, одним из способов реализации своего рода не спящего ввода-вывода для обычных файлов было бы mmap файл и mlock карта. После этого при любой разумной реализации read и write никогда бы не спит, пока смещение файла и размер буфера остаются в границах отображаемой области.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...