비동기 (Asynchronous)

비동기란 말 그대로 동시에 일어나지 않는다는 의미다.

 

즉, 요청이 들어오면 바로 결과를 주는 것이 아니라,

작업이 완료되는데로 결과를 넘겨주는 것으로 요청과 그 결과가 동시에 일어나지 않음으로

일반적으로 멀티쓰레드(Multi-thread)를 사용한 처리방식이 이에 해당한다. 

 

 

동기 (Synchronous)

동기란 동시에 일어난다는 의미이다.

 

즉, 요청이 들어오면 바로 처리를 거쳐 결과를 주는 것이다.

따라서 동기방식으로 하겠다는 것은 시간이 얼마가 걸리든 결과를 주겠다는 약속이기 때문에 특정작업이 길어지면 그만큼 행이 걸리게 된다. 

일반적으로 싱글스레드(Single-thread)를 사용한 처리방식이 이에 해당한다.

 

 

동기와 비동기의 차이

동기방식은 매우 설계가 간단하고 직관적이지만, 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있다.

 

비동기방식은 좀더 복잡하지만 결과가 주어지는 시간이 길어져도 그 시간 동안 다른 작업을 할 수 있으므로 좀더 효율적으로 자원을 사용할 수 있는 장점이 있다.

한마디로, 작업을 요청한 쓰레드(Thread)가 결과를 받을 때까지 멈추느냐 아니냐의 차이가 있다.

(단, 싱글쓰레드의 경우 작업을 요청한 쓰레드에서 처리를 하므로 쓰레드가 멈추지는 않는다.)

 

 

 

블로킹 (Blocking)

블로킹은 말 그대로 작업이 중단된다는 의미다. 

 

네트워크 통신에서 요청이 발생하고 완료될 때까지 모든 일을 중단한 상태로 대기해야 하는 것을 블로킹 방식이라 합니다. 블로킹 방식의 소켓통신은 결과가 올 때까지 다른 작업을 중단하고 하염없이 기다리게 됩니다.

 

 

 

논블로킹 (Non-blocking)

논블러킹은 말 그대로 중단되지 않는다는 말입니다. 블로킹의 반대 개념이다.

 

네트워크 통신이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있으므로 경우에 따라 효율이나 반응속도가 더 뛰어나다.

반면에 설계가 복잡해진다는 단점이 있습니다.