본문으로 바로가기

비동기, 동기, 블로킹, 논블로킹

category Helloworld! 2015. 11. 24. 10:19

- 비동기 (Asynchronous: 동시에 일어나지 않는, 非同期: 같은 시기가 아닌)

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

즉, 요청과 결과가 동시에 일어나지 않아 바로 결과가 주어지지 않고 나중에 처리된다


- 동기 (synchronous: 동시에 일어나는, 同期: 같은 시기)

동기란 비동기와 반대로 동시에 일어난다는 말한다. 따라서 요청과 그 결과가 동시에 일어나서 

요청을 하면 바로 그 요청한 자리에서 결과가 주어지며

시간이 얼마가 걸리든 상관 안하고 요청한 그 자리에서 결과를 주겠다는 약속같은 것이다.

즉, 요청과 결과가 한자리에서 동시에 일어난다


* 이렇게 동기와 비동기를 구분하는 이유는

동기와 비동기를 굳이 구분하는 이유는 상황에 따라서 장단점이 있기 때문인데

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

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


- 블로킹(Blocking)

블로킹은 말 그대로 작업이 중단된다는 의미. 네트워크 통신에서 요청이 발생하고 완료될 때까지 모든 일을 중단한 상태로 대기해야 하는 것을 블로킹 방식이라 한다.

(블로킹 방식의 소켓통신은 결과가 올 때까지 다른 작업을 중단하고 하염없이 기다리게 됨)


- 논블로킹(Non-blocking)

논블러킹은 말 그대로 중단되지 않는다는 말. 통신이 완료 될 때까지 중단되는 블로킹의 반대 개념이다.

논블로킹 방식은 아무래도 통신이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있으므로 경우에 따라 효율이나 반응속도가 더 뛰어나다.

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


참고 사이트

- http://nsinc.tistory.com/108 (여기 사이트보고 읽으면서 내가 읽기 편한 스타일로 몇글자 수정만 함)

- http://adrenal.tistory.com/16