반응형
NIO(2)
날짜: 2021년 6월 14일
학습목표
NIO는 IO와 달리 Non-blocking 방식의 입출력이라고 한다. 그때문에 IO보다 훨씬 빠르다고 하는데,
Nonblocking 과 blocking의 개념과, 그리고 그와 비슷하지만서도 다른, sync async에 대해서 먼저 알아보자.
- Synchronous VS Asynchronous
- Non-Block VS Block
- 4가지 개념 정리
Synchronous VS Asynchronous
동기와 비동기는 결과에 대한 처리를 누가 담당하느냐에 따라 나뉘는 방식이다.
- Synchronous : 특정 프로세스를 호출한 프로세스가 그에대한 결과까지 처리한다. 때문에 두개 이상의 대상(함수 or 애플리케이션)의 시작,종료시간이 일치하게 된
- Java 코드의 기본적인 메소드 호출과 실행이 Synchronous 방식이다.
- Asynchronous : 결과에 대한 확인을 호출한 프로세스가 확인하지 않는다. 호출된 프로세스가 직접 결과를 전달한다. 때문에 두개이상의 대상(함수, 애플리케이션)등의 시작과 종료시간이 제각각이다.
- JavaScript의 Callback 함수를 받아 처리하는 경우가 Asynchronous 방식이다!
Non-Block VS Block
Non-Blocking과 Blocking은 종종 동기/비동기와 같다고 생각하는 경우가 많은데, 이 둘은 바라보는 관점 다르다.
블록킹/논블록킹은 직접 제어할 수 없는 대상을 처리하는 방법에 따라 나누는 것이다. 직접 제어할 수없는 대상으로는 I/O와 멀티쓰레드 동기화가 있다.
- Blocking : 자신의 작업을 진행하다가, 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
- 자바의 Synchronized와 I/O가 그러하다.
- https://grip.news/archives/1304
- → 직접 제어할 수 없는 대상의 작업이 끝날 때까지 제어권을 빼앗긴다.
- Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것, 제어권을 빼앗기지 않는다.https://grip.news/archives/1304Non-Blocking과 Blocking의 차이는 다른 주체의 작업이 시작되었을때 자기자신의 작업에 대한 제어권이 있는지, 없는지로 구분할 수있겠다.
- 다른 주체의 작업과 무관하게 자신의 작업에 대한 제어권이 있다면 Non-Blocking, 다른 주체의 작업에 영향을 받아, 자신의 작업에대한 제어권을 잃게된다면 Blocking이다.
- → 하나의 쓰레드가 여러개의 I/O를 처리가능하다!!
4가지 개념 정리
- Blocking/Sync의 경우
- 대표적으로 자바 콘솔 입출력이 있다. 사용자가 특정 값을 입력하기 까지 프로세스는 Block 당하며, 사용자가 입력함에 따라 제어권을 되찾고, 입력한 결과값에 대한 연산을 프로세스가 수행한다.
- Non-Blocking/Sync 의경우
- 게임 혹은 사이트 접속 시 로딩바 혹은 앞의 대기열수를 알려주는 경우가 이 경우와 비슷한것 같다. 로딩이 완료대기까지, 제어권을 잃지않고, 로딩화면을 보여준다. 물론 사용자 입장에서는 기다리고 있기떄문에 제어권이 없는것 처럼 보일수 있다. 그러나 그 화면도 로딩바등을 통해 상황을 알려줌으로써, 제어권을 잃지 않고 있음을 확인 할수 있다. 이후 로딩이 완료되면 로딩화면이 사라지고, 게임 혹은 사이트에 접속하게된다.
- Blocking/Async 의 경우
- 이 경우는 Non-Blocking/Async를 구현하려다가 개발자의 실수로 나타나는 경우가 많다고 한다. 즉, 쓸모없는 경우임 ex) Node.js와 MySQL의 관계가 그렇다고 한다.
- Non-Blocking/Async 의 경우
- 대표적으로 JavaScript의Ajax등의 서버통신의 Callback 함수등이 있겠다.
Feedback
그냥 개념만 알면 될것이라 생각했는데, 생각보다 개념을 이해하는것이 어려웠다. 특히 Sync와 Async의 개념이 와닿지 않았다. 과연 이렇게 공부한걸로 응용해서 어떤걸 풀어볼수 있을까?...
알게된 점
- Synchronous VS Asynchronous
- 동기/비동기는 결과에 대한 처리를 어디서 처리하느냐에 따라 나뉘는 방식이다.
- 동기는 특정 프로세스를 호출한 프로세스에서 결과를 확인하고 처리한다.
- 비동기는 호출된 프로세스가 결과를 처리하고, 이를 호출한 프로세스에게 전달한다.
- Non-Block VS Block
- 직접 제어가 불가능한 작업을 처리하는 방법을 나눈것이다.
- 직접적인 제어가 불가능한 작업은 멀티쓰레드 동기화, I/O등이 있겠다.
- Non-Block은 제어가 불가능한 작업의 수행과 관계없이, 자기자신의 제어권을 지니고, 그대로 일을 수행하는 것이다.
- Block는 제어가 불가능한 작업이 시작되면, 스스로에대한 제어권을 잃고, 제어가 불가능한 작업이 끝날때 다시 제어권을 되찾는 것이다.
- 4가지 개념 정리
- Block/Sync : 자바의 콘솔입출력 → 사용자의 입력이 있기 까지 프로세스는 제어권을 잃고 기다린다. 사용자가 값을 입력하면 제어권을 되찾는 동시에, 결과값을 받아 처리한다.
- Non-Blcok/Sync : 게임 혹은 사이트 접속시 표시되는 로딩화면 → 사이트 혹은 게임에 접속하기까지 프로세스는 제어권을 잃지않고, 대기열수나 로딩바를 표시하며, 결과값을 확인한다.
- Block/Async : Non-Block/Async를 구현하려다 개발자들의 실수로 나오게 되는 경우, 쓸모없는 방식이다. Node.js와 MySQL의 경우가 이렇다고 한다.
- Non-Block/Async :
JavaScript의 Ajax서버통신에 따른 콜백함수처리가 대표적이다.서버통신에 따른 제어권을 잃지 않으며, 결과또한 클라이언트 단이 아닌, 서버단에서 마무리해 전달해준다.- Ajax는 Blocking/Async의 예이다.
알아야 할 점
- 버퍼의 '위치'로 인한 버퍼의 특성
- NIO는 왜 IO보다 빠른가?
References
Blocking-NonBlocking-Synchronous-Asynchronous
Sync VS Async, Blocking VS Non-Blocking
[10분 테코톡] 🐰 멍토의 Blocking vs Non-Blocking, Sync vs Async
동기 vs 비동기 (feat. blocking vs non-blocking)https://dip0cean.tistory.com/61
반응형
'프로그래밍 > Java' 카테고리의 다른 글
Buffer (0) | 2021.06.14 |
---|---|
NIO(3) (0) | 2021.06.14 |
NIO(1) (0) | 2021.06.14 |
Serializable(3) (0) | 2021.06.13 |
Serializable(2) (0) | 2021.06.13 |