2016-06-01 2 views
0

У меня есть файл 7Gig отправить с помощью JAVA NIO в 2-х случаях:Байт Распределение Затрагивающих передачи файлов в JAVA NIO

  • первых, клиент будет один посылает файл, и я выделить буфер быть 500MB это быстро прошло всего 30сек

  • Во-вторых, сервер будет один посылая файл, и я до сих пор используется 500MB как мой буфер, но он взял меня почти 30 мин, чтобы отправить файл, но когда я уменьшить буфер распределение Это улучшает производительность, пока я не дойду до 1MB выделение буфера, и мне потребовалось 1 мин для отправки файла.

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

Может кто-нибудь объяснить мне, почему это произошло?

+1

Что такое сервер? Что такое клиент? Где? R/W байт исходного кода? Нам нужно больше деталей. – HungPV

+0

Если вы отправляете через сокет TCP, размер любого буфера около 1 МБ - это избыточный избыток. Поместите некоторый код: и код отправки и получения в обоих случаях. – EJP

+0

Что вы имеете в виду под избытком? – Sumakumlawgaw

ответ

-2

Из информации, опубликованной, может быть предотвращение перегрузки TCP/Nagle при работе на стороне сервера. Чтобы проверить влияние на скорость, выполните каждый подход и обратите внимание на разницу на каждом шаге.

  1. Отключить Нэйгл через TCP_NO_DELAY
  2. использования разбросом, собираются.

Примеры как можно найти здесь: http://bedrin.livejournal.com/207032.html

+0

Не учитывал бы разницу 30 :: 1 и ничего не учитывал бы, если у него не было необъяснимых больших разрывов между передачами. Scatter/gather I/O не имеет ничего общего с алгоритмом Nagle или с передачей файла. Код в вашей ссылке недействителен. – EJP

+0

Справедливая точка верхнего уровня, дополнительная информация по вопросу, включая код, приведет к лучшей идее, почему разница 60x или 2x для меньшего файла. Scatter Gather IO поможет эффективно использовать ядро ​​сервера для NIO? – Ac11

+0

Scatter-gather от чего? Это файл. Существует только один источник данных. – EJP

Смежные вопросы