본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] nio vs io ( package level 에서의 개념, not 성능 )

by 돼지왕 왕돼지 2017. 6. 11.
반응형

 [Java] nio vs io ( package level 에서의 개념, not 성능 )


http://tutorials.jenkov.com/java-nio/nio-vs-io.html


blocking, Buffer, buffer oriented, buffer oriented non-blocking io, buffer size, cache, channel, Chat, input, input/write, IO, nio, nio vs io, nio 장단점, Non-Blocking, not 성능 ), P2P, pacakge level, Read, readline, scalability, selector, selectors, single thread, Stream, stream oriented, stream oriented blocking io, thread, write, [Java] nio vs io ( package level 에서의 개념, 개념, 단점, 모니터링, 에러, 장점, 채널


-

IO

     stream oriented blocking IO


NIO

     buffer oriented non-blocking IO

     selectors



-

Stream oriented


     한개 또는 그 이상의 byte 를 stream 에서 읽어온다.

     stream 에서 앞뒤로 왔다갔다 할 수 없다. ( buffer 를 사용해 cache 해야 가능하다. )

     

     

-

Buffer oriented


     우선 buffer 에 읽어오고 그 다음에 process 를 한다.

     buffer 를  통해 앞뒤로 왔다갔다 할 수 있다.



-

Blocking


     IO 는 read(), write() 를 수행했을 때 읽거나, 쓸 데이터가 있을 때까지 blocking 이 된다.



-

Non-blocking


     NIO 는 channel 을 통해서 read 를 하는데, 읽을 거리가 없어도  blocking 되지 않는다.

     쓰기도 마찬가지인데, channel 에 쓰라고 명령을 내려놓아도 blocking 되지 않는다.



-

Selector


     Selector 를 사용하면 single thread 에서 여러개의 channel 의 input 을 모니터링 할 수 있다.

     Selector 에 여러개의 channel 을 등록해놓고, select 를 수행하면, input/write 가능한 channel 을 돌려준다.



-

NIO 의 장, 단점


     <단>

     NIO 는 buffer size 만큼 읽어오기 때문에 해당 data 가 충분한 양을 가지고 있는지를 따로 체크해주어야 한다.

     그래서 readLine 과 같은 방식으로 사용하는 경우에는 코드가 ugly 하거나 에러가 발생할 확률이 높아질 수 있다.

     Read 의 경우에는 상황에 따라 NIO 보다는 IO 가 더 좋을 수 있다.



     <장>

     NIO 는 여러개의 thread 를 이용하여 input/output 을 관리하는 경우에는 관리적 측면에서 도움이 될 수 있다. ( 반대로 bandwidth 가 높은 적은 수의 connection 의 경우 IO 가 더 좋을 수도.. )

     예를 들면 P2P 나 chat 프로그램이라던지..

     또한 single thread 로 다른 channel 들 관리가 가능해 scalability 가 좋다.




반응형

댓글