2012-06-20 3 views
3

나는 안드로이드에서 i-jetty를 평가 중입니다. i-jetty가 NIO를 지원하고 기본적으로 활성화되어 있음을 확인했습니다. 이것은 다음과 같은 점을 알게 해줍니다. NIO와 전통적인 IO가 어떻게 안드로이드에서 비교됩니까?Android에서 자바 NIO 성능

모바일 플랫폼에서 NIO가 더 많은 메모리를 절약 할 수 있으므로 더 나은 것으로 보입니다. 반면 Java EE 에서처럼 오픈 소켓이 많이 필요하지 않기 때문에 OIO가 더 잘 맞을 수 있습니다.

+0

테스트 및 측정. NIO는 올바르게 실행하면 (즉, 하나의 스레드에서) 스레드를 저장하므로 스레드 스택에 저장되므로 메모리가 절약됩니다. wifi 또는 4G 속도에서는 CPU 바인딩이 아닌 네트워크 바인딩을 사용하게됩니다. – EJP

+0

이 http://blog.codepainters.com/2012/02/17/why-java-nio-is-a-better-idea-for-android/에 따르면 NIO는 일부 버그를 피할 수 있습니다. non-NIO 소켓 코드. – RenniePet

답변

2

이것은 답변이 아닙니다. 그냥이 구현과 빠른 수동 테스트의 결과를 공유하려는 : ION (1.1.5)와

  1. NIO 코식 두타으로 OkHttp (1.1.1)와
  2. OIO들에 의해 광장에서

테스트는 LTE와 동일한 기기 (Android 4.0.4)에서 수행됩니다. 8 분 내에 108 개의 요청이 하나씩 만들어집니다 (동시성은 없습니다). 요청은 5 부분으로 나누어집니다 : NIO -> OIO -> NIO -> OIO -> NIO. 요청은 동일한 응답을 반환하는 UserGrid API에 대한 HTTP PUT 요청이며,이 응답은 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) 추가 초기화가 1 개인 NIO 용 부품 3 개. 하지만 그 차이는 중요하지 않으므로 안드로이드 4.0.4에서 Ok보다 ION을 사용하는 것이 더 낫다고 말조차하지 않을 것입니다. – mingfai