CS 및 면접 질문
Block vs Non-Block 그리고 동기 비동기
ho-bolt
2022. 6. 15. 21:01
Block
function 호출자() {
functionA();
functionB();
function C();
}
function functionA(){
//로직
return something;
}
제어권 : 행동할 수 있는 권리
흐름 보기
- 현재 제어권은 function 호출자가 가지고 있다.
- 제어권이 functionA()로 감
- function 호출자는 제어권이 없기 때문에 functionA()를 기다려야 한다. == 호출자의 상태를 막아버렸다 (blocking)
- functionA()가 결과값(something)과 제어권이 다시 function호출자에게 돌아온다.
- => 제어권과 결과값이 넘어오는 시간이 같음 === 동기
- 그러면 이제 functionB()를 실행할 수 있게 된다.
=> 이렇게 반복되는 것이 Block
Non-Block
function 호출자() {
functionA();
functionB();
function C();
}
function functionA(){
//로직
return something;
}
흐름 보기
- 현재 제어권은 function 호출자가 가지고 있다.
- 제어권이 functionA()로 감
- 제어권이 바로 다시 function 호출자에게 돌아옴 (functionA()는 스레드, 혹은 단일 스레드 분할해서 별도로 제어권을 따로 갖고 실행)
- 제어권은 function 호출자에서 functionB()로 감 => 여기서 문제!! 제어권이 없는 functionA()에서 결과값 (something)이 이제서야 나옴
- 4번에서 functionA()는 제어권이 없는데 결과값을 어떻게 전달하냐???
- 사실 3번에서 제어권이 다시 호출자에게 돌아올 때 결과값이 담겨서 같이 넘어온다. 무슨 결과값??
- ( EAGAI/EWOULDBLOCK) 끝나지 않음 이라는 결과값
- 이렇게 보면 동기같다. 왜? 제어권의 반환과 결과값의 반환이 동시에 이루어졌으니까
- 하지만 아직 안끝났는데 반환했으니 논블락이다 !!
- 따라서 이 결과값이 끝날때까지 계속 물어본다.
동기(Synchronous)
Syn + Chrono
함께 + 시간
=> 데이터를 같은 시간에 갖게 맞춰주는 것
시간을 일치시킴
함수 A 함수 B
=======> =======>
제어권 반환
=================>
결과값 전달
==================>
즉 제어권의 반환과 결과값의 전달에 시간을 맞추는 것
비동기(Asynchronous)
시간을 맞추지 않음
함수 A
==================>
함수 B
=====>
제어권 반환
========>
결과값 전달
===========================>
즉 제어권의 반환과 결과값을 전달 시간이 같지 않은 것
정리
Block No-Block
제어권
제어할 수 없는 대상을 어떻게 처리하는 가?
Syschronous
Asynchrounous
시간
대상들의 시간을 일치시키는 가?
참조
https://www.youtube.com/watch?v=IdpkfygWIMk
728x90