block / non-block vs sync / async 의 주제는 쉬운 듯 어렵습니다. 하지만, 분명하게 차이를 알고 넘어가는 것이 중요합니다. 해당 글에서는 블로킹과 논 블로킹, 동기
block / non-block vs sync / async 의 주제는 쉬운 듯 어렵습니다. 하지만, 분명하게 차이를 알고 넘어가는 것이 중요합니다. 해당 글에서는 블로킹과 논 블로킹, 동기와 비동기를 쉽게 설명하고 있습니다. block/non-block은 결과적으로 하위 작업에 대한 실행 결과에 대한 관심사이고, sync/async는 누가 하위 작업에 대해 관심을 갖느냐에 대한 부분입니다. 말이 좀 모호할 수 있습니다. Flow를 막고 있는 것을 Block이라고 하고, 그런 상태를 blocking(상태)로 표현 한다. 쉽게 함수 라는 개념으로 살펴보면 이렇습니다. https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/ 해당 블로그를 보면 더 쉽게 이해할 수 있습니다. blocking/non-blocking의 차이는 함수 호출에 따라 함수 호출처에서 대기 하게 만드는 경우라면, blocking 되었다 라고 할 수 있으며, 함수 호출 이후 바로 제어권이 넘어오는 경우는 non-bloking 상태다 라고 할 수 있습니다. A -> B() // B의 작업을 계속 A가 제어권을 받기 위해 기다림 A -> B() // B의 작업을 A가 호출 하자 마자 제어권을 다시 돌려 받음 sync/async의 차이는 하위 작업 결과에 기다리는 주체가 누구인가?에 대한 부분입니다. A -> B() // B의 작업이 A가 관심을 가지고 기다리고 있는 상태라면, Sync A -> B() // B의 작업은 시작 되자마자, Callback 형태로 반환 되었으나, 완료 여부를 B가 계속 관심 가짐, Async Sync blocking Sync Non-blocking Async blocking Async Non-blocking 모두 다른 개념이기 때문에, 조합이 가능합니다. 쉬워보이지만, 어려운 정의 같습니다.