SyncAsyncBlockingNonblocking

1-J-1·2024년 7월 18일

Sync와 Blocking의 개념은 다르다.

blocking && non-blocking

제어권이란 자신(함수)의 코드를 실행할 수 있는 권리이다. 제어권을 가진 함수가 자신의 코드를 실행한 후에 자신을 호출한 함수에게 제어권을 돌려준다.

blocking이란 A가 B를 호출했을 때, B에게 제어권을 넘겨주는 것이다.
제어권을 넘겨주었기 때문에 A는 제어권을 돌려받기 전까지 함수의 실행을 멈추고 있는다.

nonblocking이란 A가 B를 호출했을 때, A가 그대로 제어권을 갖고있는 것이다.
제어권을 넘겨주지 않아 B를 호출하여도 A가 계속 함수를 실행하고 있는다.

Sync && Async

동기와 비동기의 차이는 함수의 작업 완료 여부 확인의 차이다.

sync는 A가 B를 호출한 뒤, 함수 B의 반환값을 계속 확인하는 것이다.

async는 A가 B를 호출하며 콜백 함수를 함께 전달하여, 함수 B의 작업이 완료되면 콜백 함수를 실행시킨다.

blocking && non-blocking && Sync && Async

blocking && sync
A는 B의 반환값이 필요하여 제어권을 B에게 넘겨준다. 함수 B가 실행 완료 후에 반환값(sync)과 제어권(blocking)을 돌려줄 때까지 기다린다.

nonblocking && sync
A가 B를 호출하며 제어권을 주지 않고, 자신의 코드를 계속 실행한다(nonblocking). A는 B의 반환값이 필요하기 때문에 중간중간 B의 실행 완료 여부를 물어본다(sync).

nonblocking && async
A가 B를 호출하며 제어권을 주지 않고, 자신의 코드를 계속 실행한다. B를 호출하며 콜백함수를 전해주어 B가 끝났을 때 콜백함수를 실행한다.

blocking && async
A가 B를 호출하며 제어권을 넘긴다. A는 B에 보낸 콜백함수가 실행될 때까지 기다린다.
-> 관련 없는 함수의 작업이 끝날 때까지 기다리는 것이라 잘 쓰지 않음

ok 굿 이해돼쓰

[참고]


참고

profile
엉덩

0개의 댓글