June 26, 2021
흔히 동기/비동기와 블로킹/논블로킹 개념을 혼용하는 경우가 많다. 동기=블로킹, 비동기=논블로킹 이렇게 생각하는 경우가 많은데 이는 틀린 생각이다.
동기/비동기와 블로킹/논블로킹은 서로 다른 관점의 이야기이다. 동기/비동기는 두 작업의 주체가 서로 작업의 시간을 맞추느냐 안 맞추느냐에 대한 개념이고 블로킹/논블로킹은 내가 직접 제어할 수 없는 대상을 상대하는 방법에 대한 개념이다. 따라서 동기이면서 논블로킹인 작업, 그리고 비동기이면서 블로킹인 작업도 개념적으론 가능하다.
동기는 작업을 수행하는 두 주체가 서로 작업의 시간을 맞추는 것을 말한다.
A와 B가 시작 시간 또는 종료 시간이 일치
A의 종료 시간과 B의 시작 시간이 일치
작업을 수행하는 두 주체가 서로 작업의 시간을 맞추지 않으면 비동기이다.
비동기 작업은 동기 작업보다 throughput이 높다. 하지만 프로그래밍하기 어렵다.
어떤 대상에게 작업을 요청하고 그 결과값을 받을 때까지 다른 일을 하지 않고 기다리면 블로킹이다.
대상의 작업 완료 여부와 상관없이 계속 작업을 수행하면 논블로킹이다.