
동기, 비동기, 블로킹, 논블로킹을 정확히 이해하고 있는가?
최근 본 기술면접에서 질문을 받았다. 나름 이해하고 있다고 생각했는데, 입 밖으로 설명하는게 너무 어려웠다.
두 가지 방식의 여러가지로 설명할 수 있다.
하지만 나는 더 직관적으로 이렇게 표현한다.
B작업이 완료된 후 A작업를 수행하는 지

비동기 방식을 사용하는 것은, 영향을 미치지 않는 작업이 여러개 있을 때 성능 향상을 위해 사용한다. I/O 작업처럼 응답시간이 오래 걸리는 작업에서 불필요한 대기 시간을 줄일 수 있다.
동기-비동기는 작업 완료 순서를 보장하는 방식이었다.
그리고 블로킹-논블로킹은, 작업의 흐름을 막느냐 안막느냐의 차이이다.

위 사진의 왼쪽(동기)에서, 프로세스 A는 B가 완료될 때 까지 기다렸다 실행이 된다.
이 때 프로세스A는 블로킹으로 동작할 수도 있고, 논블로킹으로 동작할 수도 있다.


비동기 & 논블로킹 상황은 이해가 쉽다. 작업 완료 순서를 신경쓰지 않아도 되므로, 작업도 멈추지 않는다.
비동기 & 블로킹 상황은 보통 사용되지 않는다.
얼추 비슷한 역할을 하는 것 같지만, 차이를 확실히 알아두자.
동기는 작업 완료 순서를 보장하는 방식이고
비동기는 작업의 완료 순서를 신경쓰지 않고 작업을 진행하는 방식이다.
블로킹은 하나의 작업을 진행할 동안 다른 작업을 멈추는 방식이고
논블로킹은 하나의 작업을 진행할 동안 다른 작업을 멈추지 않는 방식이다.
둘 다 작업을 멈추는 것 같지만,
동기는 작업 완료 순서를 확인하는 것이고(멈췄을수도,안멈췄을수도)
블로킹은 작업을 멈추는 것이다.
둘 다 작업을 병렬적(동시에 다른 작업을 수행)으로 진행하는 것 같지만
비동기는 작업의 완료 순서에 상관없이 수행하는 것이고
논블로킹은 작업을 멈추지 않는 것이다.
그렇다면, 병렬 vs 비동기 vs 논블로킹은 어떤 차이일까..?
좋은 글이네요! :)