본문 바로가기

프로그래밍/Java

NIO(2)

반응형

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가지 개념 정리

  1. Blocking/Sync의 경우
    • 대표적으로 자바 콘솔 입출력이 있다. 사용자가 특정 값을 입력하기 까지 프로세스는 Block 당하며, 사용자가 입력함에 따라 제어권을 되찾고, 입력한 결과값에 대한 연산을 프로세스가 수행한다.
  2. Non-Blocking/Sync 의경우
    • 게임 혹은 사이트 접속 시 로딩바 혹은 앞의 대기열수를 알려주는 경우가 이 경우와 비슷한것 같다. 로딩이 완료대기까지, 제어권을 잃지않고, 로딩화면을 보여준다. 물론 사용자 입장에서는 기다리고 있기떄문에 제어권이 없는것 처럼 보일수 있다. 그러나 그 화면도 로딩바등을 통해 상황을 알려줌으로써, 제어권을 잃지 않고 있음을 확인 할수 있다. 이후 로딩이 완료되면 로딩화면이 사라지고, 게임 혹은 사이트에 접속하게된다.
  3. Blocking/Async 의 경우
    • 이 경우는 Non-Blocking/Async를 구현하려다가 개발자의 실수로 나타나는 경우가 많다고 한다. 즉, 쓸모없는 경우임 ex) Node.js와 MySQL의 관계가 그렇다고 한다.
  4. 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

https://wbluke.tistory.com/49

 

Sync / Async / Blocking / Non-Blocking 간단 정리

늘 헷갈리는 비동기 개념 안녕하세요! 이번 포스팅에서는 늘 모두가 제가 헷갈려하는 Sync 와 Async , Blocking 과 Non-Blocking 에 대해 정리해 보려고 합니다. 해당 개념들에 대해 개발자마다 의견도 조

wbluke.tistory.com

Blocking-NonBlocking-Synchronous-Asynchronous

 

Blocking-NonBlocking-Synchronous-Asynchronous

꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면

homoefficio.github.io

동기와 비동기, 그리고 블럭과 넌블럭

 

동기와 비동기, 그리고 블럭과 넌블럭

무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비

musma.github.io

Sync VS Async, Blocking VS Non-Blocking

 

Sync VS Async, Blocking VS Non-Blocking

1. Sync VS Async 먼저 Synchronous와 Asynchronous의 어원을 보자. Synchronous의 Syn는 together이란 뜻이고, chrono는 time이다. 따라서 Synchronous는 함께 시간을 맞춘다라는 뜻으로 해석된다. 반면에 A

velog.io

[10분 테코톡] 🐰 멍토의 Blocking vs Non-Blocking, Sync vs Async

동기 vs 비동기 (feat. blocking vs non-blocking)https://dip0cean.tistory.com/61

 

F017 - Blocking, Non-Blocking / Synchronous, Asynchronous

✍️ 예전에 Node.js를 잠깐 공부하면서 기초 지식을 쌓는다고 해당 개념을 스쳐 지나가 듯 찾아 봤던 기억이 있다. 블로그에 정리도 했던 것 같은데, 당시에는 Thread와 Process 그리고 이로 인해 운

dip0cean.tistory.com

 

반응형

'프로그래밍 > 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