Non-Blocking/Blocking 과 Async/Sync

gryoh·2023년 5월 25일
0

유투브를 보다가 Blocking과 Non-Blocking에 대한 내용이 나왔는데 이해하기가 어려웠는데
정리가 잘된 글을 찾게되어 정리해봤다.

Blocking VS Non-Blocking

Blocking/Non-Blocking을 얘기할때는 제어권이라는 것이 중요하다.

제어권 : 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.

Blocking

자신의 작업이 진행되다 다른 주체를 호출하면 호출된 주체의 작업을 끝날 때까지 기다렸다가 작업을 다시 시작

  • 제어권을 호출한 함수에게 넘기고 호출한 함수가 일이 끝나면 제어권을 다시 돌려받음

Blocking 예시

직원 : 과장님 여기 작성한 서류입니다.
과장 : 다 읽을 때까지 기다리세요
직원 : (서류를 다 읽을때까지 아무것도 안하고 기다린다.)
과장 : 서류 다 읽었으니 가서 일하셔도됩니다.
직원 : 넵 (다시 일하러 간다.)

Non-Blocking

다른 주체의 작업에 관련없이 자신의 작업을 함

Non-Blocking 예시

직원 : 과장님 여기 작성한 서류입니다.
과장 : 읽어볼 테니 다시 일하러 가세요.
직원 : 네 알겠습니다.(도로 돌아가 일하러 감)

Synchronous vs Asynchronous

Synchronous/Asynchronous을 얘기할때는 결과에 관심이 있느냐가 중요하다.

Sync와 Async는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 없는지로 판단한다. 즉, 신경을 쓰느냐 안쓰느냐의 차이!

Synchronous

작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미.

  • 함수를 호출하고 호출된 작업이 완료되면 호출한 주체가 작업을 시작함(요청이 들어온 순서대로 하나씩 처리함)

Synchronous 예시

직원 : 과장님 여기 작업한 서류입니다.
과장 : 알겠습니다.
직원 : 다 읽으셨나요? (과장이 서류를 다 읽을 때까지 기다리거나 다 읽었는지 주기적으로 물어본다.)
과장 : 다 읽었습니다.
직원 : 넵. 바로 처리하겠습니다.

Asynchronous

시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미

  • 함수를 호출하고 호출된 작업을 하더라도 호출자가 자신의 작업을 처리할 수 있다.(callback함수를 전달해서 작업이 완료되면 호출한 함수에게 전달)

Asynchronous 예시

직원 : 과장님 여기 작업한 서류입니다.
과장 : 알겠습니다.
직원 : 자신의 일을 한다. (과장이 서류를 읽든 말든 자기 일 하기 바쁨)
과장 : 다 읽었습니다.
직원 : 네 언젠간 처리하겠습니다.

동기와 비동기는 결과와 순서에 연관되어 있다.

Blocking / Non-Blocking / Synchronous / Asynchronous 조합

참고 : https://0soo.tistory.com/217

0개의 댓글