본문 바로가기

컴퓨터/JAVA

자바 고급 스터디 11 . Blocking vs Nonblocking, Synchronous vs Asynchronous

반응형

자바 고급 스터디 목록

공부 시간 : 2021/05/23 15:50 ~ 16:50

11주차. Blocking vs Nonblocking, Synchronous vs Asynchronous

Blocking vs Blocking

블로킹과 논블로킹의 차이는 함수호출과 결과 리턴에 대한 이야기이다. (기술적으로 명확하게 구분된다.)

  1. Blocking
  • A 라는 함수를 호출 했을때, 기대하는 행위(동작)을 모두 마칠때까지 기다린 후, 결과값을 리턴함.
  1. NonBlocking
  • A 라는 함수를 호출 한 후, 기대하는 행위(동작)을 요청 한 후 바로 리턴함.

함수를 실행한 후 리턴하는데 까지 시간이 얼마나 걸리는지로 블로킹 / 논블로킹을 판단 할 수도 있다.

"Hello World"를 출력하고 결과를 반환하는 함수의 경우에, 원하는 동작을 수행하고 리턴값을 반환하기때문에
이론적으로 봤을때는 블로킹되었다고 할 수 있다. 하지만, 매우 짧은 시간이 걸릴 것이므로 다음 함수를 실행하는데
대기시간은 거의 없는 상황일 것이다. 위 와 같은 상황은 논블로킹이라고
말 해도 무방하다.

Synchronous vs Asynchronous

동기, 비동는 기술적으로 구분되지 않는 추상적인 문제이다.
A, B가 서로 연관이 있는 다른 행위라고 가정해보자.

  1. Synchronous(동기)
  • A와 B가 순차적으로 실행되면 동기이다.
  • 만약, A와 B가 동시에 실행되더라도, A와 B사이에 의존, 연관관계가 없다면 동기이다.
    (연관관계가 없다면 동기, 비동기를 굳이 논하는 것의 의미가 크게 없는 듯 하다.)
  1. Asynchronous(비동기)
  • A와 B가 동시에 실행되면 비동기이다.
  • A와 B가 동시에 실행된다고 해도, A가 B에 밀착하여(완전히 의존하여) 실행된다면 비동기라고 할 수 없다.

정리

  • 블로킹과 논블로킹은 동시성문제와 무관하다.
  • 블로킹/논블로킹은 메서드 실행 후 시간이 얼마나 걸리는지로 판단할 수도 있다.
  • 동기, 비동기는 동시성과 관련이 있다.
  • 동기, 비동기를 나누는건 대부분 쓰레드와 관련한 것이라고 생각하면 된다.

참고 사이트 :

반응형