본문 바로가기

programmer/COM

Blocking, NonBlocking, Sync, AnSync 차이

Socket 통신을 공부한다면 처음 접하고 이해해야 하는 개념이 바로 Blocking, Blocking, NonBlocking, Sync, ASync이다.

설명과 친절한 이미지를 보면서 정확히 이해해 보자.

 

Blocking

Blocking은 아래 그림처럼 Function A가 Function B가 수행 완료되기까지 아무것도 못하고 기다리는 상태이다. 프로그래밍할 때 기본적으로 함수를 콜 하면 이와 같은 방식으로 작동하고 기본 Socket도 아무 설정 안 하고 Read함수를 사용하면 무한정 대기 모드로 빠진다.

Non-Blocking

말 그대로 Blocking을 하지 않겠다는 뜻이다. thread가 하나일 때 무한정 기다린다면 다른 작업을 하지 못할 것이다.(예 지금 socket이 죽었는지 살았는지 현재 네트워크 상태는 어떤지 아니면 read 외 다른 작업을 하고 싶을 때) 이를 해결하기 위해 Non-Blocking 기술을 지원한다.

Function A는 Function B를 시작하자마자 handle(프로세스 실행 권한)을 회수해 Function A의 남은 작업을 수행한다. Function B는 자기 나름대로 작업을 수행하고 Return 한다.

 

 

blocking 소켓 프로그래밍을 짯는대 non blocking으로 바꾸고 싶을 땐 '여기'를 참고하자.


자 Blocking, Non-Blocking 개념을 확실히 이해하였고, 가장 헷갈리는 Sync, Async가 남았다. 동기, 비동기라는 뜻 인대 이를 명확하게 이해해 보자.

 

Sync

먼저 blocking 상태의 Sync와 ASync을 보자, 두 상태 모두 blocking 상태이기 때문에 Function A는  Function B 실행 이후에는 아무것도 하지 못한다. 단, 하나의 차이점은 바로 Function B를 호출할 때 반환하는 Callback Handler를 통해 종료 여부를 확인한다는 것이다. 

Callback Handler를 사용하는 게 뭐가 그리 큰 차이가 되냐고 말할 수 있지만 Async 예제를 보면 이해 가능하다.

 

Async 

이미지 설명은 Non-blocking 상태에서 Sync, Async 상태이다.

Non-blocking, Sync 상태에서 Sync를 계속 확인하게 되는데 이는 Fucntion B가 종료를 Return하지 않아도 주기적인 완료 확인 메시지를 계속 보내 Function B의 완료 상태를 확인한다. 왜 굳이 이런 방식을 쓰는지 의아할 수도 있지만 네트워크 환경이나 구성에 따라 이러한 구조가 필요할 수 있다.

Non-blocking,  Async는 어떻게 보면 최적화된 작업을 지원한다고 볼 수 있다. Non-Blocking 이기 때문에 실행은 자유롭고 Fucntion B가 실행되는 지점에서 Callback을 넘기기 때문에 종료 시그널을 Callback을 통해 받을 수 있다.
이에 대한 예제로는 기본 리눅스 Socket을 사용한다면 AIO, Boost를 사용한다면 ASIO를 검색해 보면 알 수 있다.


설명의 예로 Fuction A와 Function B를 들었지만 저 둘의 관계는 Network가 될 수도 있다. 이는 개념 설명을 위한 예시이므로 위와 같은 개념을 이해한 상태로 Network를 구축하면 개발에 도움이 될 것이다.

 

위와 같은 방식 외에도 Socket을 thread로 생성하거나 wirte, read 하는 부분만 따로 thread로 생성하여 통신 프로토콜을 구축하는 방법도 있다. (Thread활용 채팅 프로그램 예제)

반응형
사업자 정보 표시
라울앤알바 | 장수호 | 서울특별시 관악구 봉천로 13나길 58-10, 404호(봉천동) | 사업자 등록번호 : 363-72-00290 | TEL : 010-5790-0933 | Mail : shjang@raulnalba.com | 통신판매신고번호 : 2020-서울관악-0892호 | 사이버몰의 이용약관 바로가기

'programmer > COM' 카테고리의 다른 글

C Socket 사용시 주의점  (0) 2020.10.15
도구 평가 인증 종류  (0) 2020.07.28
CAPL 사용 방법 및 예제  (4) 2020.03.17