비동기

CS) Synchronous & Asynchronous

2023. 2. 12. 18:04

Synchronous & Asynchronous

처리해야할 작업들을 어떠한 흐름(시간)으로 처리할것인가에 대한 관점이다.

Synchronous: 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작

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




Synchronous(동기)

synchronous

Synchronous함수A(caller)함수B(callee)의 작업 완료후 리턴을 기다린다.

이렇게 caller가 callee의 작업 완료 여부에 신경을 쓰면 Synchronous이다.





Asynchronous(비동기)

Asynchronous

Asynchronous함수A(caller)함수B(callee)를 호출할때 콜백 함수를 함께 전달한다.

그후 함수B(callee)의 작업이 완료되면 콜백함수를 실행하여 함수A(caller)에 정보를 보낸다.

이렇게 caller가 callee의 작업 완료여부에 신경을 쓰지 않으면 Asynchronous이다.





Blocking & Non-Blocking

제어권이 누구한테 있느냐가 관심사이다.

Blocking: 자신의 작업을 진행하다 다른 주체의 작업이 시작되면 다른 작업이 끝날 때 까지 기다렸다가 자신의 작업을 한다.

Non-Blocking: 다른 주체의 작업에 관련없이 자신의 작업을 한다.




Blocking

blocking

Blocking이란 함수A(caller)함수B(callee)를 호출하면, 제어권을 A가 호출한 함수 B에게 넘겨준다





Non-blocking

Non-blocking

Non-Blocking이란 함수A(caller)함수B(callee)를 호출하면 호출하는 순간에는 함수B(callee)에게 제어권을 넘겨주지 않아, 함수B(callee)의 완료 여부에 상관없이 함수A(caller)를 계속해서 실행한다.




Synchronous & Asynchronous + Blocking & Non-Blocking

Synchronous & Asynchronous + Blocking & Non-Blocking

Synchronous + blocking

함수A(caller)함수B(callee)를 호출한다.

이때 함수A는 함수B의 리턴값을 필요로한다 (동기)

따라서 제어권을 함수B에게 넘겨주고, 함수B로부터 제어권을 다시 받아올때까지 기다린다 (블로킹)




Synchronous + Nonblocking

함수A(caller)함수B(callee)를 호출한다.

이때 함수A는 함수B에게 제어권을 주지 않으며, 자신의 코드를 실행한다(논블로킹)

하지만 함수A는 함수B의 리턴값을 필요로하기때문에, 중간중간에 B함수가 실행을 완료했는지 확인한다.(동기)




ASynchronous + blocking

함수A(caller)함수B(callee)를 호출한다.

이때 함수A는 함수B의 작업에 신경을 쓰지않고 콜백함수를 보낸다.(동기)

함수A는 함수B의 작업 완료에 관심이 없지만 제어권을 함수B에게 넘긴다.(블로킹)

*ASynchronous + blocking은 Synchronous + blocking과 성능이 비슷해 사용하는 경우는 거의 없다고한다. *




ASynchronous + Nonblocking

함수A(caller)함수B(callee)를 호출한다.

이때 제어권을 함수B에게 넘기지 않고 자신이 가지고있는다 따라서, 함수B를 호출한 이후에도 함수A는 멈추지 않는다. (논 블로킹)

함수A는 함수B를 호출할때 콜백함수를 함께줘 함수B의 작업이 끝나면 함수A가준 콜백함수를 실행한다.(비동기)





Reference

'CS' 카테고리의 다른 글

CS) 프로세스와 스레드  (0) 2023.02.08
CS) Function,Predicate  (0) 2023.02.08
CS) Functional Programming  (0) 2023.02.08
CS) Mutable,Immutable  (0) 2023.02.08
CS) Tokenizer,Lexer,Parser  (0) 2023.02.08

+ Recent posts