Async & Sync, Blocking & Non-Blocking

도비·2024년 8월 5일

Operating System

목록 보기
1/1
post-thumbnail

개인 공부를 위한 Blocking과 Non-Blocking, Sync와 Async 정리

동기(Synchronous), 비동기(Asynchronous)

Synchronous (동기)

동기 방식에서는 한 작업이 끝날 때까지 다음 작업이 기다리는 방식이다. 즉, 작업이 직력적으로 처리된다.

예시 : A 함수가 B 함수를 호출할 때, B 함수의 결과를 A 함수가 처리함

Asynchronous (비동기)

비동기 방식에서 작업이 시작되면, 그 작업이 완료될 때까지 기다리지 않고 바로 다음 작업을 시작할 수 있다. 즉, 작업이 병렬적으로 처리된다.

예시 : A 함수가 B 함수를 호출할 때, B 함수의 결과를 B 함수가 처리함.

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

블로킹과 논블로킹은 호출된 함수의 제어권과 관련이 있다.

Blocking (블로킹)

호출된 함수가 자신의 작업이 종료될 때까지 제어권을 가지고 있는 것이다. 호출된 함수의 작업이 종료될 때까지 호출하는 함수는 다른 작업을 진행할 수 없다.

예시 : A 함수가 B 함수를 호출할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것

Non-Blocking (논 블로킹)

논블로킹은 호출된 함수가 자신의 작업이 종료되지 않아도 함수의 제어권을 자신을 호출하는 함수로 바로 넘겨주는 것을 말한다.

예시 : A 함수가 B 함수를 호출할 때, B 함수가 다른 제어권을 얻고 A 함수는 본인의 제어권을 가지고 있으며 A 함수가 다른 일을 할 수 있도록 하는 것

Non-Blocking == Async인가요? NO❗️
Blocking / Non-blocking 과 Sync / Async 는 다른 개념이다.

Blocking/Non-Blocking의 경우 제어권을 가지는 것에 대해 관련이 있고, Sync/Async의 경우 호출된 함수의 종료를 처리하는 것에 대해 관련이 있다.

조합 모델

Blocking / Async

Blocking / Async 방식을 위 내용을 바탕으로 정리해보면 다음과 같다.

  • A 함수가 B 함수를 호출할 때, B 함수가 제어권을 가져간다.
  • A 함수가 B 함수를 호출할 때, B 함수의 결과는 B 함수가 처리한다.

사실 Blocking/Async 의 경우는 일어날 일이 별로 존재하지 않기 때문에, 넘어가도 된다. 보통 Non-Blocking/Async를 목표로 하였지만 잘못 프로그래밍 하는 경우 발생한다고 한다.

Non-Blocking / Sync

Non-Blocking Sync 방식은 Blocking / Sync 모델과 차이가 없다.

위 내용을 바탕으로 정리해보면 이 모델은 다음과 같다.

  • A 함수가 B 함수를 호출할 때, 제어권을 가지고 있어 본인의 일을 할 수 있다.
  • A 함수가 B 함수를 호출할 때, 결과를 받기 위해 기다리며 결과를 받으면, 처리한다.

이 방식은 정보를 받아올 동안 Progress를 보여줄 수 있는 Progress Bar를 사용할 때 사용할 수 있다.


참고

우테코 BE 테코톡

profile
하루에 한 걸음씩

1개의 댓글

comment-user-thumbnail
2024년 8월 11일

Nonblocking/Blocking 개념은 생소하군요... 잘배우고갑니다! 히히

답글 달기