Как вы пишете нулевую копию в Java? В чем основные отличия

Я читал о том, как вы можете использовать библиотеку java nio, чтобы воспользоваться преимуществами передачи/буферизации файлов на уровне O/S, который называется «нулевым копированием».

В чем тогда разница в том, как вы создаете/записываете файлы? Есть ли недостатки в использовании нулевого копирования?


person loyalflow    schedule 11.05.2012    source источник


Ответы (2)


нулевая копия означает, что ваша программа не будет передавать данные из пространства ядра в пространство пользователя и так далее. эту более быструю хорошую статью можно найти здесь: http://www.ibm.com/developerworks/library/j-zerocopy/

person miks    schedule 11.05.2012
comment
Я прочитал статью и понимаю преимущества нулевого копирования, но как вы, как разработчик Java, проверяете (посредством отладки или мониторинга), что данные не проходят через приложение при использовании вызова метода transferTo()? Ваши мысли будут оценены. - person Andy Dufresne; 18.03.2013
comment
Это просто работает. Легко и просто. Когда вы вызываете метод transferTo(), Java автоматически передает данные способом zero-copy. Поскольку вы не используете традиционные вызовы read и write, данные передаются на уровне ОС. Если вам все еще любопытно, сравните скорость выполнения с традиционным циклом. - person veganaiZe; 12.09.2017

Нулевое копирование — это метод, при котором приложение больше не является «посредником» при передаче данных с диска на сокет. Приложения, использующие нулевое копирование, требуют, чтобы ядро ​​копировало данные непосредственно из файла на диске в сокет, минуя приложение, что повышает производительность и уменьшает количество переключений контекста.

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

Эту статью IBM DeveloperWorks о нулевом копировании стоит прочитать.

Другие способы файлового ввода-вывода в java - это использование классов Stream в зависимости от типа файла, который вы хотите читать/записывать. Это включает в себя как буферизованные, так и небуферизованные потоки, хотя обычно буферизованные потоки обещают лучшую производительность, поскольку они вызывают меньше циклов поиска ввода-вывода и, следовательно, меньше переключений контекста.

person Nagendra U M    schedule 11.05.2012
comment
Например, если приложение берет поток из http-запроса и сохраняет его на диск, что «лучше»? - person loyalflow; 11.05.2012