Skip to content

Latest commit

 

History

History
122 lines (93 loc) · 5.03 KB

BlockingNon-blocking & SynchronousAsynchronous.md

File metadata and controls

122 lines (93 loc) · 5.03 KB

Blocking/Non-blocking & Synchronous/Asynchronous

블록/논블록

블록, 논블록은 함수를 호출 해놓고 다음 코드를 실행할 수 있는지 여부이다.

즉, 호출된 함수호출한 함수에게 제어권을 건네주는 유무의 차이라고 볼 수 있다.

  • 블록 (Block)
    • 함수 B는 내 할 일을 다 마칠 때까지 제어권을 가지고 있는다. A는 B가 다 마칠때까지 기다려야한다.
  • 논블록 (Non-Block)
    • 함수 B는 내 할 일을 마치지 않았어도 A에게 제어권을 바로 넘겨준다. A는 B를 기다리면서도 다른 일을 할 수 있다.

image

동기/비동기

동기, 비동기는 함수를 호출해놓고 결과를 통보 받는 방법이다.

일을 수행중인 동시성에 주목하면 된다.

  • 동기(Sync)
    • 순차적: 호출되는 함수는 한번에 하나의 요청만 처리한다.
    • 함수 종료 return
  • 비동기(Async)
    • 비순차적: 호출되는 함수는 여러 개의 요청을 동시에 처리할 수 있다.
    • 콜백 함수 호출

image

동기, 비동기, 블록, 논블록을 조합하면 다음과 같다.

image

  • 블록 + 동기
    • 호출되는 쪽도 일 하나만 하고 호출하는 쪽도 기다려야 하는 상황이다.
  • 블록 + 비동기: 비동기 함수의 결과값을 기다려야 하는 상황
    • 결국 다른 작업이 끝날 때까지 기다려야 하므로, 호출하는 쪽에서는 블록 + 동기와 큰 차이는 없다.
    • 그래도 비동기로 여러 개의 요청을 동시에 처리한다는 점에서 의미가 있다.
  • 논블록 + 동기
    • 논블록 상태에서도 계속 폴링(Polling)하므로 가장 비효율적이다.
  • 논블록 + 비동기: 비동기 함수의 결과값이 불필요한 상황
    • 자원이 충분하면서 동기가 필요하지 않다면 가장 효율적이다.

비동기 주요 사레

image

비동기는 언제 끝날지 모르는 작업을 기다리지 않고 다음 작업을 처리할 수 있다.

  • 네트워크 연결 지연
  • 데이터베이스 연산 지연
  • 파일 입출력 지연

동기/비동기 호출 사례 분류

  • 동기 함수에서 동기 함수 호출 : 일반적인 경우로 문제 없음
  • 동기 함수에서 비동기 함수 호출
    • 결과값이 필요 없다면: 호출된 함수는 호출한 함수에 바로 제어권을 돌려주고, 호출한 함수는 다음 코드를 실행한다.
    • 결과값이 필요하다면: 호출하는 동기 함수를 비동기로 바꿔야 한다.
  • 비동기 함수에서 비동기 함수 호출
    • 결과값이 필요 없다면: 호출된 함수는 호출한 함수에 바로 제어권을 돌려주고, 호출한 함수는 다음 코드를 실행한다.
    • 결과값이 필요하다면: await를 붙여서 호출하고 결과를 기다려야 한다.

즉, 비동기 함수를 호출해서 결과값을 받아야 한다면, 먼저 호출하는 함수 역시 async를 붙여 비동기 함수로 만들고, 호출 할 때는 await를 붙여 결과를 기다려야한다.

예시

1) Blocking & Synchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (아 언제 되지?..궁금한데 그냥 멀뚱히 서서 치킨 튀기는거 보면서 기다림)

2) Blocking & Asynchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 앗 넹
-- 사장님 치킨 튀기는 중--
나 : (언제 되는지 안 궁금함, 잠시만이래서 다 될때까지 서서 붙잡힌 상황)

3) Non-blocking & Synchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
(5분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요
(10분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠ
(15분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠㅠ

4) Non-blocking & Asynchronous

나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (앉아서 다른 일 하는 중)
...
사장님 : 치킨 나왔습니다
나 : 잘먹겠습니다~

참고문헌

https://wikidocs.net/168327 https://raw.githubusercontent.com/gyoogle/tech-interview-for-developer/master/Computer%20Science/Network/%5BNetwork%5D%20Blocking%2CNon-blocking%20%26%20Synchronous%2CAsynchronous.md