반응형
java.io, java.nio (new input/output)
io는 blocking, nio 는 non-blocking 방식(blocking도 지원)
io는 stream 형식으로 입출력, nio는 channel 형식으로 입출력
이라고 하지만 결국에는 커넥션을 맺는건데 이게 왜 중요할까???
예를 들어 이렇게 생각할 수 있을거 같다.
"실제로 데이터를 끊어서 읽어온다음 처리하는게 아니라 다 읽어오고 나서 처리하는건데 non-blocking 되는게 필요한거야?"(물론 끊어 읽어와서 처리하는 것도 가능은하다.
이런 의문은 소스코드를 보면 더 커진다.
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer); // 데이터가 들어올 때까지 대기 (blocking)
int bytesRead = socketChannel.read(buffer); // 데이터 없으면 0 반환
그치만 데이터가 들어올 때 까지 blocking 된다는 것은 thread가 다른 일을 하지 못한다는 것을 의미한다.
즉 열개의 데이터가 동시에 들어올 때 하나의 thread만이 일한다고 생각하면, 하나씩 열번 처리 되는 것과 하나가 열개를 왔다갔다 하면서 처리하는 정도의 차이가 생길 것이다.
그러니 다음 상황을 고려해서 io와 nio중 결정하면 될 것이다.
- 연결되는 connection이 많은가?
- 전송되는 데이터의 양이 많은가?
- 순차적으로 진행되어야 하는가?
반응형
'JAVA' 카테고리의 다른 글
| Java Collection - List (0) | 2025.08.08 |
|---|---|
| Java Collection - Map (3) | 2025.08.08 |
| Java Collection Framework (4) | 2025.07.12 |
| interface vs abstract class (1) | 2025.07.05 |
| Blocking vs Non-Blocking, Synchronous vs Asynchronous (0) | 2025.04.21 |