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

zeew00·2024년 7월 13일
1

동기 & 비동기란 :

간략히 설명하면 작업 처리의 흐름을 정의하는 방식이다.
둘의 가장 큰 차이는 호출되는 함수의 작업완료 여부를 확인하는지 여부의 차이인데
각 방식 별 자세한 설명은 아래에 추가로 작성되어있다.

동기(Synchronous) :

동기는 처리되는 작업의 요청과 결과가 한 자리에서 발생하며 현재 처리되고 있는
작업의 요청이 모두 완료되고 응답을 리턴한 후 다음 작업을 처리할 수 있다.

함수 A가 B를 호출한 뒤, 함수 B의 리턴 값을 지속적으로 확인하는 것이다.

비동기(Asynchronous) :

비동기는 호출하는 함수가 호출된 함수의 작업완료 여부를 관여하지 않고 함수는 함수를 호출할 때 callback 함수를 같이 전달하고 작업이 완료되었을 시 callback 함수가 실행된다.

함수 A가 B를 호출할 때 callback 함수를 같이 전달해서 B의 작업이 완료되면
함께 보냈던 callback 함수를 실행한다.

동기 방식과의 차이점은 A가 B를 호출한 후 B의 완료 여부에 신경쓰지 않는다.

Blocking & Non-Blocking :

블로킹과 논블로킹은 호출된 함수의 제어권과 관련이 있다.
(자세한 설명은 아래로 스크롤 시 볼 수 있다...)

Blocking :

블로킹은 A 함수가 B 함수를 호출하면 A가 호출한 B에게 제어권을 넘겨준다.

  1. A 함수가 B 함수를 호출하면 B에게 제어권을 넘겨준다.

  2. 제어권을 받은 B 함수가 실행되고, A는 B에게 제어권을 넘긴 후
    함수 실행을 잠시 일시정지한다.

  3. B 함수의 실행이 종료되면 자신을 호출한 A에게 제어권을 반환한다.

Non-Blocking :

논 블로킹은 함수 A가 B를 호출해도 제어권을 그대로 갖는다.

작업 완료까지 대기하지 않고 즉시 다음 작업을 수행하고 결과를 나중에
확인하거나 callback을 통해 처리하며 다른 작업을 동시에 수행할 수 있다.

이러한 차이로 인해 논블로킹 방식은 블로킹 방식보다
시스템의 자원을 더 효율적으로 활용할 수 있다는 장점이 있다.

  1. 함수 A가 B를 호출하면 B가 실행되고, 제어권은 A가 그대로 갖고 있다.

  2. 함수 A는 계속 제어권을 갖기 때문에 B를 호출한 이후에도
    자신의 코드를 계속해서 실행한다.

Sync-Blocking (동기+블로킹)

동기 : 함수 A는 제어권을 B에게 넘겨준다.(리턴 값 지속적 확인)

블로킹 : 함수 B가 실행을 완료하면 리턴 값과 제어권이 반환될 때까지 대기한다.

Sync-Nonblocking (동기+논블로킹)

논블로킹 :
함수 A는 B를 호출하고 제어권은 그대로 가진 상태에서 자신의 코드를 계속 실행한다.

동기 : 함수 A가 제어권을 그대로 갖고 있지만 B의 리턴 값이 필요하기 때문에
작업중 지속적으로 함수 B에게 함수 실행 완료 여부를 질의한다.

즉 논블로킹이라 타 함수를 호출하더라도 제어권을 소유한 상태에서 본인의 코드를
계속 실행하지만 동기 방식이라 B 함수의 리턴 값이 필요해 B에게 작업이 완료 되었는지
집요하게 계속 물어본다. (논블로킹인 동시에 동기인 방식)

Async-blocking (비동기+블로킹)

비동기 : A는 B의 리턴 값에 관여하지 않고 콜백함수를 보낸다.

블로킹 : B의 작업에는 관여하지 않지만 A는 B에게 제어권을 넘겨준다.

결과적으로 A는 자신과 관련이 없는 B의 작업이 끝날 때까지 기다려야 한다.

Async-Nonblocking

논블로킹 :
A는 B를 호출하고 제어권은 넘기지 않으며 B를 호출한 뒤에도 계속 실행된다.

비동기 : B를 호출할 때 콜백함수를 함께 주고
B 함수의 작업이 종료될 시 A 함수가 넘겨준 콜백 함수를 실행한다.

- 참고 문헌 : 사진자료 인용 블로그 https://sujinhope.github.io/2021/06/13/Network-%EB%8F%99%EA%B8%B0vs%EB%B9%84%EB%8F%99%EA%B8%B0,- %EB%B8%94%EB%A1%9C%ED%82%B9vs%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9%EC%9D%98-%EC%B0%A8%EC%9D%B4.html
profile
컴공 편입 폴붕이의 일상

0개의 댓글