Sync & Async, Blocking & Non-Blocking

uxmin·2023년 1월 25일
0

CS, Computer Science

목록 보기
1/2

동기와 비동기

Input과 Output, 누가 주체가 될 것인가

동기 (Sync)

호출한 함수가 호출된 함수의 결과값을 필요로 하는 것

A: 제 옷을 수선하고 싶습니다. 이걸 입고 약속 장소로 가야해요.
B: 알겠습니다. 보아하니 1시간 정도 소요될 것 같네요. 괜찮으세요?
A: 제가 바로 나가야해서 여기 앞에서 기다리고 있겠습니다. 최대한 빠르게 처리해주세요.
B: 네, 조금만 기다려주세요.

비동기 (Async)

호출한 함수가 호출된 함수의 결과값을 필요로 하지 않으며 콜백 함수를 전달
호출된 함수의 수행이 끝난 후 콜백 함수 실행

A: 동생의 옷을 수선하고 싶습니다. 오늘 중에 입어야 한다네요.   
B: 알겠습니다. 보아하니 1시간 정도 소요될 것 같네요. 혹시 직접 찾으러 오시나요?   
A: 아니요. 저는 약속이 있어서 동생이 찾으러 올 겁니다.   
B: 그렇다면 여기 동생분의 성함과 연락처를 남겨주시겠어요? 수선이 끝나면 동생분께 연락드릴게요.
  
(1시간 후)
B: 수선이 완료 되었으니 옷을 찾으러 오세요.
C: 네. 지금 가겠습니다.

블로킹과 논블로킹

언제 수신 되는가

블로킹 (Blocking)

호출한 함수가 호출된 함수에게 제어권을 전달
호출된 함수가 수행된 후 호출한 함수에게 제어권을 반환
이 때 제어권을 넘겨 준 호출한 함수는 반환받을 때까지 대기상태

A: 이 것 처리 좀 해주세요.
B: 네, 알겠습니다. 요구하신 것 총 20분 소요됩니다.

(5분 후)
A: 처리 됐나요?
B: (응답없음)

(5분 후)
A: 저기요?
B: (응답없음)

(10분 후)
B: 처리 되었습니다. 감사합니다.

논블로킹 (Non-Blocking)

호출한 함수가 호출한 함수에게 제어권을 전달하지 않고 보유
호출된 함수는 실행 후 종료
이 때 제어권을 보유한 호출한 함수는 호출된 함수와 별개로 제어권을 가지고 지속적인 실행

A: 이 것 처리 좀 해주세요.
B: 네, 알겠습니다. 요구하신 것 총 20분 소요됩니다.

(5분 후)
A: 처리 됐나요?
B: 아니요. 아직 15분 남았습니다.

(5분 후)
A: 지금은요?
B: 아직 기다리셔야 합니다. 10분 남았습니다.

(10분 후)
B: 처리 되었습니다. 감사합니다.

동기와 비동기, 블로킹과 논블로킹의 4가지 모델

동기(S) - 블로킹(B)

  1. 호출한 함수가 호출된 함수에게 제어권을 전달
  2. 함수가 수행된 후 호출한 함수에게 제어권과 결과값을 반환
  3. 호출한 함수는 호출된 함수가 제어권을 반환할 때까지 대기하다 제어권과 결과값을 반환받고 로직 수행

동기(S) - 논블로킹(NB)

  1. 호출한 함수가 호출된 함수에게 제어권을 전달하지 않음
  2. 호출한 함수는 로직 수행하며 호출된 함수의 종료 지점을 지속적으로 체크
  3. 호출된 함수가 실행이 완료되면 결과값을 호출한 함수에게 Return

비동기(A) - 블로킹(B)

  1. 호출한 함수가 호출된 함수에게 제어권과 콜백 함수를 전달 후 제어권을 반환받을 때까지 대기
  2. 호출된 함수가 수행된 후 콜백 함수를 실행하고 제어권 반환
  3. 호출한 함수는 제어권을 반환받은 후 로직 수행

이 케이스는 굉장히 비효율적으로 보이는데 어떤 상황에서 효율적인지 예시를 알고 싶었으나 아직 찾지 못함 😭

비동기(A) - 논블로킹(NB)

  1. 호출한 함수가 호출된 함수에게 제어권을 전달하지 않고 콜백 함수를 전달
  2. 호출된 함수를 실행 후 콜백 함수를 실행
  3. 호출한 함수는 호출된 함수의 실행 여부와 별개로 제어권을 가지고 로직 수행
profile
Back-end Developer

0개의 댓글