Sync & Async & Block & Non-Block

leehyunjon·2022년 6월 20일
0

CS

목록 보기
1/1

Sync, Async, Block, NonBlock

Synchronus & Asnynchronus

					 	출처 : https://hadev.tistory.com/27

Sync

2개의 함수가 시간을 맞춰 수행이 되는 것.

호출된 함수가 수행할때 호출한 주체 함수는 호출된 함수가 작업완료상태가 될때까지 다른 작업을 하지 못하다가 작업완료상태가 되면 주체 함수는 다른 작업을 마저 수행할수 있다.

Async

2개의 함수가 다른 함수의 작업완료를 기다리지 않고 본인 일을 수행하는 것.

호출한 함수에 대한 결과물을 직접 받지 않고 콜백 함수를 통해 완료 여부를 파악하고 결과값을 받아 연관된 작업을 진행한다.

Blocking & NonBlocking

Blocking

호출된 함수가 자신이 완료상태가 되기 전까지 제어권을 호출한 함수에게 넘겨주지 않아 호출한 함수가 그 동안 다른 작업을 하지 못하게 된다.

NonBlocking

호출된 함수가 자신이 완료상태가 되지 않아도 제어권을 호출한 함수에게 넘겨주어 호출한 함수가 다른 작업을 하게 하는것.

(Sync vs Block) & (Asnyc vs Non-Block)

그렇지만 Sync와 Block, Async와 Non-Block은 둘다 얼핏보면 서로 같은 얘기인것같은데 둘의 차이점이 뭘까?

HomoEfficio님의 블로그에 따르면 관심사에 따라 보면 차이점이 보인다고 하셨다.

Sync & Asnyc는 호출되는 함수의 완료여부를 누가 신경쓰냐가 관심사다.
호출한 함수의 완료 여부를 스스로 계속확인하며 신경쓰면 Synchronous,
호출한 함수의 완료 여부를 신경쓰지 않고 자신의 할일을 수행하면 Asynchronous이다.

Block & NonBlock은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사다.
호출된 함수가 바로 리턴하지 않고 작업완료가 되기 전까지 제어권을 넘기지 않고 대기하게 한다면 Block,
호출된 함수가 바로 리턴해서 호출한 주체에게 제어권을 넘겨 호출한 주체에게 다른 일을 할 기회를 주면 NonBlock이다.


조합

Sync-Block

출처 : https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

호출한 함수의 완료여부를 확인하는 Sync와 호출한 주체에게 제어권을 넘기지 않는 Block의 조합이다.

호출된 함수는 완료상태가 될때까지 호출한 주체에게 제어권을 넘기지 않아 호출한 주체는 다른 작업을 하지 못하는 상태가 된다.

Async-NonBlock

출처 : https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

호출한 함수의 여부를 신경쓰지 않는 Asnyc와 호출한 주체에게 바로 return하고 제어권을 넘겨주는 Non-Block의 조합이다.

호출된 함수는 완료 상태가 되기도 전에 호출한 함수에게 제어권을 넘겨 호출한 주체는 호출한 함수가 콜백함수를 호출하기 전까지 다른 작업을 수행하고 있을 수 있다.

Sync-NonBlock

출처 : https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

호출한 함수의 완료여부를 지속적으로 확인하는 Sync와 호출한 함수에게 제어권을 넘겨주어 다른 작업을 할수 있게 하는 Non-Block의 조합이다.

호출된 함수가 제어권을 호출한 주체에게 넘겨주어 주체는 다른작업을 수행할수 있다. 그러면서 지속적으로 완료 상태를 확인하게 된다.

Async-Block

출처 : https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

호출한 함수의 완료 여부와 상관없이 자신의 일을 하는 Asnyc와 제어권을 넘겨주지 않는 Block의 조합이다.

함수를 호출하고 다른 작업을 수행하려고 하지만, 호출한 함수에서 제어권을 넘겨주지 않아 주체는 다른 작업을 수행하지 못하고 콜백이 호출되면 작업을 수행한다.

Reference

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

https://hadev.tistory.com/27

profile
내 꿈은 좋은 개발자

0개의 댓글