동기/비동기

Better late than never·2023년 5월 9일
0

#동기 #비동기 #블로킹 #논블로킹 #메세지 #이벤트 #병렬처리 #Async #Event #콜백

Explanation

동기, 비동기 관련 용어 정리 및 모음

  • 제어권 : 자신(함수)의 코드를 실행할 권리, 제어권을 가진 함수는 자신의 코드를 끝까지 실행 한 후 자신을 호출한 함수에게 돌려준다
  • 결과값을 기다리는 것 : 함수 a, b 두 개가 존재하면 a에서 b를 호출 했을 떄 a가 b의 결과 값을 기다리느냐 여부(return 여부 및 return 값을 신경쓰는지)

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

처리해야 할 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점

동기와 비동기의 차이는 호출되는 함수의 작업 완료 여부를 신경쓰는지 여부

호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐, 안따르느냐 관심사

동기

a가 b를 호출한 뒤 b의 리턴 값을 계속 확인하면서 신경쓰는 것

즉, 리턴 값을 받거나 호출되는 함수가 종료되어야 동작

비동기

a가 b를 호출할 때 콜백 함수를 함께 전달 해 b의 작업이 완료되면 함께 보낸 콜백 함수를 실행

즉, a는 b를 호출한 후로 b의 작업 완료 여부를 신경쓰지 않는다(return 상관 없이 동작)

즉 동기와 비동기의 차이는 호출하는 함수의 return값, 호출되는 함수가 종료되는지를 신경 쓰는지 안 쓰는지에 따라서 동작

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

처리되어야 하는 (하나의) 작업이, 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점

블로킹과 논블로킹의 차이는 a가 b를 호출 시 제어권을 어떻게 처리하느냐에 여부

제어권이 누구한테 있느냐가 관심사

블로킹

a가 b를 호출하면, 제어권을 a가 호출한 b에게 넘겨준다

  1. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
  2. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
  3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.

논블로킹

a가 b를 호출해도 제어권을 그대로 자신이 가지고 있는다

  1. A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
  2. A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.

0개의 댓글