Я хочу асинхронно читать / писать на необработанное устройство (которое является просто файлом в Linux), и я использовал java.nio.channels.AsynchronousFileChannel
.
Но это «поддельный асинхронный», потому что AsynchronousFileChannel использует пул потоков для выполнения задач чтения / записи. Фактически он вызывает синхронизированный интерфейс чтения / записи, предлагаемый ОС.
Что мне действительно нужно, так это настоящая асинхронная реализация, которая называется io_submit
в Linux.
Но я не могу найти его в jdk или любых других репозиториях, таких как guava или apache.
Итак, мой вопрос таков:
Существует ли в java реализация асинхронного средства доступа к файлам на основе собственного интерфейса io_submit
?
Если нет, то почему я не вижу никого, кому это нужно?
rmlan, может существовать асинхронная реализация, которая использует io_submit в Linux и потоки на платформах, которые не поддерживают этот механизм - это не должно нарушать независимость платформы.
почему ты хочешь сделать это? Что это позволит вам сделать такое, чего не позволяет AsynchronousFileChannel
?
Вот обсуждение: mail.openjdk.java.net/pipermail/nio-discuss/2011-July/…
@tgdavies, спасибо, я видел это обсуждение. Но причина, по которой я этого хочу, заключается в том, что если я отключу кеш файловой системы и дисковый буфер, реализация потоков не сможет дать хорошую производительность по сравнению с io_submit.
In java, is there an existing implementation of asynchronous file accessor based on the native io_submit interface
Отсутствует в библиотеках Java по умолчанию на момент написания (2019 г.). Я сомневаюсь, что есть большой энтузиазм по внедрению оболочки Java io_submit()
в библиотеки по умолчанию, потому что:
libaio
/ KAIO необычный. Linux KAIO чреват ограничениями, такими как асинхронность только при выполнении прямого ввода-вывода (и даже тогда есть очень сложные правила, которые сделают отправку синхронной в случае нарушения, которые выходят за рамки контроля вызывающего).libaio
будет рядом, поэтому вам придется связать ее с Java или иным образом переопределить.If not, why can't I see anyone else who need it ?
Люди, которым это очень нужно, воссоздали обертки (например, см. https://github.com/zrlio/jaio). Однако поддержка KAIO была бы единственным делом Linux и, следовательно, не такой переносимой (что немного противоречит ключевой концепции Java).
Разве это не противоречит самой «платформенно-независимой» природе Java?