본문 바로가기
CS (Computer Science)

Blocking / Non-Blocking

by 앙헬디마리아 2021. 3. 1.
728x90

 1주차 주제 Blocking / Non-Blocking

 

- blocking 프로그램과 non- blocking 프로그램
- 동기 비동기 프로그램


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


non- blocking
네트워크 통신이 완료될때 까지 기다리지 않고 다른 작업을 수행할 수 있으므로 경우에 따라 효율이나 반응속도가 더 뛰어나다.
반면에 설계가 복잡하다는 단점이 있다.


블로킹과 논블로킹은 다른 작업을 수행하는 주체를 어떻게 상대하는지가 중요하다.
자신의 작업을 하다가 다른 작업 주체가 하는 작업의 시작부터 끝까지 기다렸다가 다시 자신의 작업을 시작하다면 이는 블로킹이고, 다른 주체의 작업과 관계없이 자신의 작업을 계속한다면 이를 논블로킹이라고 할 수 있다.

예를 들자면 Java에서 JDBC를 사용하여 DB에 질의를 날리고 결과를 받아오는 작업을 블로킹 작업이라고 부를 수 있습니다.
이와 반대로 다른 주체에게 작업을 요청하고 그 결과를 받을 때 까지 기다리지 않으며 자신의 작업을 한다면 이를 논블로킹이라고 할 수 있다.


동기 비동기 프로그램

동기
말 그대로 동시에 일어난다는 뜻, 요청과 그 결과가 동시에 일어난다는 약속인데, 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 결과가 주어져야 한다.

비동기
동시에 일어나지 않는다는 뜻, 요청한 그 자리에서 결과가 주어지지 않음

장단점으로는 동기는 간단하고 직관적인 반면 응답을 기다려야하고 비동기 방식은 동기보다 복잡하고, 응답을 기다리면서 다른 작업을 할 수 있어 효율적으로 사용할 수 있다.
또한 동기 처리 모델에서 알아두어야할 점은 작업의 순서가 보장되지만 비동기 처리 모델에서는 작업의 순서가 보장되지 않는다.


설명을 적다보니 동기처리방식이 블로킹이고 비동기 처리 방식이 논 블로킹와 비슷한거 같다.
같은 개념으로 혼동하기 쉽지만, 동기/비동기화 블로킹/논블로킹은 서로 다른 개념이다.

동기/비동기는 서비스나 함수의 동작방식을 나타내는말이고, 블로킹/논블로킹은 소캣의 동작방식을 나타내는 말이다.

728x90