Параллелизм в приложении Java EE - PullRequest
1 голос
/ 01 июля 2010

Ранее я задавал этот вопрос: Чтение быстрого фильма из сервлета на веб-странице? В основном я использовал сервлет для потоковой передачи файла фильма в плагин QuickTime в браузере (для воспроизведения файла вне корня). В конце Райан Фернандес задал мне вопрос, касающийся проблемы параллелизма. У меня действительно нет проблемы здесь.

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

  • Райан также спросил о производительности с использованием сервлета. Потому что он занимает много памяти? Когда мы используем backing bean или jsf, jsp (на основе сервлета), если многие пользователи обращаются одновременно, количество созданных экземпляров огромно. Это также требует много памяти, как мы решаем это?

Пожалуйста, помогите мне ответить на эти вопросы. И если у вас есть хорошая статья по этим вопросам: параллелизм, многопоточность, производительность, можете поделиться со мной, я новичок. Большое спасибо. С уважением К.

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Ну, если вы имеете в виду этот комментарий:

сколько пользователей вы ожидаете, что этот сервлет будет одновременно обслуживать?Вы уверены, что ввод-вывод, который у вас возник при создании Fileinputstream, сработает для более чем нескольких одновременных запросов?

Тогда он имел в виду, что если вы попытаетесь, могут возникнуть проблемы.открытие одного и того же файла с 100 отдельными потоками вручную.

То, как веб-серверы справляются с такой ситуацией, не должно беспокоить вас, так как они могут реализовать ее так, как захотят.

Что касается основного вопроса, то вот что я нашел в javadoc:

class FileInputStream
public FileChannel getChannel()

Возвращает уникальный объект FileChannel, связанный с этим потоком ввода файла.

class FileChannel

Файловые каналы безопасны для использования несколькими параллельными потоками.Метод close может быть вызван в любое время, как указано в интерфейсе Channel.В любой момент времени может выполняться только одна операция, которая включает положение канала или может изменить размер его файла;Попытки инициировать вторую такую ​​операцию, пока первая еще не завершена, будут блокироваться до завершения первой операции.Другие операции, в частности те, которые занимают явную позицию, могут выполняться одновременно;действительно ли они это делают, зависит от базовой реализации и поэтому не определено.

0 голосов
/ 01 июля 2010
  • Веб-серверы созданы для обслуживания файлов.Это основная функция веб-сервера.Это оптимизировано для этого.Вы должны спросить себя: почему бы просто не разместить этот файл filename.mov где-нибудь на сервере и позволить серверу транслировать его?Никакой java, просто http://myserver.com/static/filename.mov. Конечно, это не всегда вариант, но я думаю, Райан спрашивал вас, рассматривали ли вы его вообще.не вижу проблем с параллелизмом в вашем коде.Все переменные являются локальными, каждый поток получит свои собственные входные и выходные потоки.Но здесь применяется тот же аргумент: почему бы просто не позволить веб-серверу справиться с этим?Предполагается, что они хороши в предоставлении одного файла нескольким клиентам.

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