2012-06-20 2 views
3

Я оцениваю i-jetty на android. Я видел, что i-jetty поддерживает NIO и включен по умолчанию. Это подводит меня к сути: Как NIO и традиционные IO сравниваются на Android?Производительность Java NIO на Android

На первый взгляд кажется, что на мобильной платформе NIO будет лучше, так как это может сэкономить больше памяти. С другой стороны, OIO может поместиться лучше, поскольку обычно нам не нужно много открытых сокетов, как на Java EE.

+0

Тест и меры. NIO будет экономить на потоках, если вы сделаете это правильно, то есть в одном потоке, и, следовательно, сохранит потоки, которые сохраняют память. При скорости Wi-Fi или 4G вы все равно будете привязаны к сети, а не связаны с CPU. – EJP

+0

В соответствии с этим http://blog.codepainters.com/2012/02/17/why-java-nio-is-a-better-idea-for-android/, может быть преимущество с NIO, избегая некоторых ошибок в не-NIO. – RenniePet

ответ

2

Это не должно быть ответом. Просто хочу поделиться результатом быстрого ручного теста с двумя реализациями:

  1. NIO с ION (1.1.5) по Koushik Датта
  2. Оио с OkHttp (1.1.1) парни на площади

Тест выполняется на том же устройстве (Android 4.0.4) с LTE. В течение 8 минут 108 запросов выполняются один за другим (без параллелизма). Запросы разбиваются на 5 частей: NIO -> OIO -> NIO -> OIO -> NIO. Запрос представляет собой HTTP-запрос PUT для API UserGrid, который возвращает тот же ответ, который обращается к String и обрабатывается таким же образом.

В миллисекунды:

NIO/ION 60 times OIO/OkHttp for 48 times   
Min. : 889  Min. : 629.0 
1st Qu.: 1086  1st Qu.: 774.5 
Median : 1426  Median : 1241.0 
Mean : 1659  Mean : 1712.2 
3rd Qu.: 1697  3rd Qu.: 1881.2 
Max. :10913  Max. :16333.0 

Std Dev: 1329.406 Std Dev: 2254.099 

Примечания:

  • Приложение перезапущен между каждой частью. Таким образом, тест NIO/ION имеет еще один «первый запуск», который немного медленнее. Однако это не должно иметь большого значения для среднего/среднего.

Из этого теста вы можете сказать, что NIO более предсказуемо в ответное время.

Как я уже сказал, это не должно быть ответом. Мне интересно увидеть другой результат теста и выяснить, в каком сценарии NIO/OIO лучше. thx

+0

Этот тест благоприятен для OIO, но результат NIO лучше. 1) одиночный нить. 2) 3 части для NIO с дополнительной инициализацией. Но разница не значительна, поэтому я бы даже не сказал, что лучше использовать ION, чем OkHttp на Android 4.0.4 – mingfai

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