스레드 블로킹 VS 논블로킹 VS synchronous VS asyncronous

각 개념들을 아래의 작업들로 예시를 들어보자면,

내 작업: 햄버거를 먹는다.
상대의 작업: 엄마의 잔소리를 듣는다.
상대의 결과: 청소 명령을 내린다.

블로킹

다른 주체의 작업이 시작되면 그 작업이 끝날때까지 자신의 작업을 기다린다.

햄버거를 먹는다.
엄마가 잔소리를 시작한다.
햄버거를 내려놓고 기다린다. 잔소리가 끝나면 햄버거를 다시 먹는다.

논블로킹

다른 주체의 작업이 시작되도 자신의 작업을 진행한다.

햄버거를 먹는다.
엄마가 잔소리를 시작한다.
그래도 햄버거를 계속 먹는다.

synchronous

다른 작업으로부터 받은 작업을 받자마자 바로 처리한다.

햄버거를 먹는다.
엄마가 잔소리를 시작한다.
(블로킹이냐 논블로킹에 따라 내 행동을 결정) 엄마가 청소 명령을 내린다.
바로 청소를 시작한다.

asyncronous

다른 주체로부터 받은 작업을 자신의 기준에 따라 처리여부를 결정한다.

햄버거를 먹는다.
엄마가 잔소리를 시작한다.
(블로킹이냐 논블로킹에 따라 내 행동을 결정) 엄마가 청소 명령을 내린다.
(햄버거를 다먹고 처리하기로 결정했을시) 햄버거를 다먹고 청소를 시작한다.