CS 및 면접 질문

Block vs Non-Block 그리고 동기 비동기

ho-bolt 2022. 6. 15. 21:01

https://www.iptc.org/

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;
 }

흐름 보기

  1. 현재 제어권은 function 호출자가 가지고 있다.
  2. 제어권이 functionA()로 감
  3. 제어권이 바로 다시 function 호출자에게 돌아옴 (functionA()는 스레드, 혹은 단일 스레드 분할해서 별도로 제어권을 따로 갖고 실행)
  4. 제어권은 function 호출자에서 functionB()로 감 => 여기서 문제!! 제어권이 없는  functionA()에서 결과값 (something)이 이제서야 나옴 
  5. 4번에서 functionA()는 제어권이 없는데 결과값을 어떻게 전달하냐???
  6. 사실 3번에서 제어권이 다시 호출자에게 돌아올 때 결과값이 담겨서 같이 넘어온다. 무슨 결과값??
  7. ( EAGAI/EWOULDBLOCK) 끝나지 않음 이라는 결과값
  8. 이렇게 보면 동기같다. 왜? 제어권의 반환과 결과값의 반환이 동시에 이루어졌으니까
  9. 하지만 아직 안끝났는데 반환했으니 논블락이다 !!
  10. 따라서 이 결과값이 끝날때까지 계속 물어본다.

동기(Synchronous)


 

Syn + Chrono
함께 + 시간
=> 데이터를 같은 시간에 갖게 맞춰주는 것

시간을 일치시킴

함수 A 함수 B

=======> =======>

제어권 반환

=================>

결과값 전달

==================>

즉 제어권의 반환과 결과값의 전달에 시간을 맞추는 것

 

비동기(Asynchronous)


시간을 맞추지 않음

함수 A
==================>

함수 B
=====>

제어권 반환
========>
결과값 전달
===========================>

 

즉 제어권의 반환과 결과값을 전달 시간이 같지 않은 것 

 

 

 

정리 


Block No-Block

제어권 

제어할 수 없는 대상을 어떻게 처리하는 가? 

 

 

Syschronous

Asynchrounous

시간 

대상들의 시간을 일치시키는 가? 

 

 

 

참조 

https://www.youtube.com/watch?v=IdpkfygWIMk 

https://incheol-jung.gitbook.io/docs/q-and-a/java/or-or-or

728x90