본문 바로가기

CS

Sync, Async vs Blocking, Non-Blocking

동기, 비동기 vs 블로킹, 논블로킹

흔하게 쓰이는 용어들 중에 명확하게 구분하고 이를 정의하기 쉽지 않은 것들이 있다.
그 중에서도 대표적인 게 동기/비동기의 차이와 블로킹/논블로킹의 차이가 있을 것이다.
우리는 동기적이다 라는 개념과 블로킹의 개념을 동일 시 하고 비동기와 논블로킹을 비슷한 개념으로 이해하고 사용하는 것 같다.
하지만 이를 구분할 줄 알아야 각각의 개념을 더 잘 이해할 수 있을 것 같다.

사전적인 의미

  • 동기, 비동기는 어떻게 구분할 수 있을까?
    이 둘을 구분하는 관심사는 특정 함수를 호출했을 때 그 결과를 신경쓰는 주체의 차이이다.
  • 동기적이다 라는 의미는 함수 A가 함수 B를 호출했을 때 함수 B의 결과에 대해 A가 신경을 쓰는 경우를 의미한다.
  • 비동기적이다 라는 의미는 함수 A가 함수 B를 호출했을 때 함수 B의 결과를 B가 신경쓰는 경우를 의미한다. (Callback 함수)

그렇다면 블로킹, 논블로킹은 어떤 관심사로 구분할 수 있을까?
바로 제어권을 누가 갖고있느냐의 차이이다.

  • 블로킹이다 라는 의미는 함수 A가 함수 B를 호출했을 때 제어권이 함수 B에 있고 함수 B가 완료 될 때까지 제어권을 기다려야한다.
  • 논블로킹이다 라는 의미는 함수 A가 함수 B를 호출하고 함수의 제어권을 바로 A가 가져와서 다른 작업을 수행할 수 있다.

동작의 관점에서 구분

  • 논블로킹 : 제어문의 수준에서 지체 없이 반환해주는 것
  • 비동기 : 별도의 쓰레드에서 실행하고 그 결과를 호출하는 측에 알려주는 것

2 by 2 Matrix

'CS' 카테고리의 다른 글

리눅스 쉘과 명령어 기초  (0) 2019.09.30
Big-Endian, Little-Endian  (0) 2019.05.17
gdb  (0) 2017.09.21