[java] Blocking vs Non-Blocking, Sync vs Async

Jifrozen·2022년 11월 11일
0

기초 다지기

목록 보기
22/29

기본 용어

  • 제어권
    - 코드를 실행할 권리를 말한다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다
  • 결과값 반환
    - 함수 결과값을 반환함을 의미한다.

Blocking(블로킹)과 Non-blocking(논블로킹)

둘의 차이는 제어권의 관점으로 바라봐야한다.
1) 블로킹

A함수가 B함수를 호출하여 제어권을 넘긴다. A함수는 제어권이 없어 멈춘 상태
B함수가 실행되고 B함수가 완료되면 다시 A함수에게 제어권을 넘긴다.
A함수가 다시 실행된다.

2) 논블로킹

A함수가 B함수를 호출해 B함수가 실행되지만 제어권은 A함수가 갖는다.
A함수는 제어권을 가지고 있기때문에 계속 실행한다.

Synchronous(동기)와 Asynchronous(비동기)

둘의 차이는 호출되는 함수의 작업 완료 여부를 신경쓰는지의 여부 차이이다.
1) 동기
함수 A가 함수 B를 호출하고 계속 B리턴값을 확인하면서 신경쓰는 것이 동기이다.

2) 비동기
함수 A가 B를 호출할 때, 콜백 함수를 함께 전달해서 함수 B의 작업이 완료되면 함께 보낸 콜백함수를 실행한다.
함수 A는 B호출한 후로 B의 작업 완료여부를 신경쓰지 않는다.

4가지 조합

1) Sync / Blocking
작업 여부 신경씀 && 제어권 넘겨서 결과값 반환까지 기다림
2) Sync / Non-Blocking
작업 여부 계속해서 물어보고 신경씀 && 제어권 넘기지 않고 다른 일 수행 가능
3) Async / Blocking
작업 여부 관심없음 콜백 호출로 받음 && 제어권 넘겨 다른일 못함
4) Async / Non-Blocking
작업 여부 관심없음 콜백 호출로 받음 && 제어권 넘기지 않아 다른 일 수행 가능

https://velog.io/@nittre/블로킹-Vs.-논블로킹-동기-Vs.-비동기
https://www.youtube.com/watch?v=oEIoqGd-Sns
https://gyoogle.dev/blog/computer-science/network/Blocking,Non-blocking%20&%20Synchronous,Asynchronous.html

0개의 댓글