Почему FileChannel в Java не является неблокирующим? - PullRequest
17 голосов
/ 18 октября 2010

Я хотел написать программу, которая записывает в несколько файлов одновременно; думал, что это будет возможно с одним потоком, используя неблокирующий режим. Но FileChannel не поддерживает неблокирующий режим. Кто-нибудь знает почему?

Ответы [ 2 ]

14 голосов
/ 18 октября 2010

UNIX не поддерживает неблокирующий ввод / вывод для файлов, см. Неблокирующий ввод / вывод с обычными файлами .Поскольку Java должна (по крайней мере, пытаться) обеспечить одинаковое поведение на всех платформах, FileChannel не реализует SelectableChannel.

Однако Java 7 будет включать новый AsynchronousFileChannelкласс, который поддерживает асинхронный файловый ввод / вывод, который отличается от неблокирующего ввода / вывода.

Как правило, только сокеты и каналы действительно поддерживают неблокирующие операции ввода / вывода через механизм select().

0 голосов
/ 18 октября 2010

Проще говоря, большинство операционных систем не рассматривают обычные файлы как нечто, что может блокировать, поэтому они не позволяют явно установить их в неблокирующее состояние.

...