본문 바로가기
ETC

[OS] (동기/비동기) 와 (블럭/논블록의) 차이

by 안주형 2022. 4. 11.

서론

os 관련하여 깃허브에서 면접 자료들을 살펴볼 때마다 (동기/비동기)(블록/논블록의) 차이를 물어보는 질문이 너무 많았습니다. 공룡 책을 정독할 때도 책에서 위와 같은 내용은 다루지 않았던 걸로 기억을 하는데 오늘 한번 개념을 확실하게 정리해 보려고 합니다.

 

블록(Block)과 논블록(Non-Block)

먼저 블록/논블록은 기술적으로 명확히 구분이 되며, 우리가 흔히 알고 있는 Block의 개념과 같습니다.

  • A라는 함수를 실행했을 때, A라는 함수가 모든 행위를 끝마칠 때까지 기다렸다가 다른 함수가 실행되면 이것은 블로킹되었다고 합니다.
  • 만약 A라는 함수를 호출했는데, A라는 함수의 로직이 끝나기도 전B라는 함수가 실행된다면  이것은 논블록킹 되었다고 합니다.
종류 예시
블럭(Block) - 함수 A와 함수 B가 있고, 순서가 A -> B라고 가정하자.
- 함수 B는 함수 A가 끝날 때까지 호출되지 못한다.
- 즉, 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 return 하지 않으면 블럭이다.
논블럭(Non-Block) - 함수 A, B, C가 있고, 순서가 A -> B -> C라고 가정하자.
- 메인함수가 함수 A를 호출한다. 그러면 호출된 함수A는 실행되고 바로 리턴하면서 함수 B가 실행된다.
- 여기서 리턴은 함수 A의 로직이 모두 끝난 후가 아닌, 시작하자마자 리턴한다는 의미이다.
- 즉, 호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 바로 return하여 호출한 함수가 다른 일을 진행할 수 있도록 하면 논블럭이다.

 

동기(Synchronous)와 비동기(Asynchronous)

블록/논블록과 다르게 기술적으로 구분되지 않으며, 추상적인 구분 즉, 행위에 대한 이야기입니다.

종류 예시
동기(Synchronous) - 블록과 유사하다. 하지만 차이점은 결과를 확인한다는 것이다.
- 블록의 경우에는 함수의 결과가 나왔는지 확인하지 않는 반면, 동기의 경우에는 확인을 한다.
- 즉, 호출된 함수의 수행 결과 및 종료를 호출된 함수 뿐 아니라 호출한 함수도 함께 신경쓰면 동기이다.
비동기(Asynchronous) - 우리가 흔히 알고 있는 멀티스레드의 경우가 바로 비동기이다.
- 결과 확인과 무관하게 계속 진행된다.
- 동시성 문제를 해결해야한다.
- 즉, 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경쓰고 처리하면 비동기이다.

 

정리

 

 

참고

댓글