서론
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) | - 우리가 흔히 알고 있는 멀티스레드의 경우가 바로 비동기이다. - 결과 확인과 무관하게 계속 진행된다. - 동시성 문제를 해결해야한다. - 즉, 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경쓰고 처리하면 비동기이다. |
정리
참고
'ETC' 카테고리의 다른 글
당신은 트랜잭션에 대해 얼마나 알고 있는가 (4) | 2023.06.06 |
---|---|
이진트리 탐색 운행법 (0) | 2022.06.21 |
[DB] 트랜잭션(transaction)이란? (0) | 2022.06.17 |
[python] 클래스 변수와 __dict__ (0) | 2021.12.14 |
[python] Broadcasting(브로드캐스팅) (0) | 2021.12.14 |
[python] 클래스의 특별한 메서드 (0) | 2021.12.12 |
댓글