Распределение байтов, влияющих на передачу файлов в JAVA NIO

У меня есть файл 7Gig для отправки с использованием JAVA NIO в 2 сценариях:

  • Во-первых, клиент будет отправлять файл, и я выделю буфер размером 500 МБ, это быстро, это заняло всего 30 секунд.

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

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

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

1 ответ

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

  1. Отключить Nagle через TCP_NO_DELAY
  2. Используйте разброс, соберите.

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

Другие вопросы по тегам