개발자 면접 공부/네트워크&DB

블로킹 소켓 (Blocking Socket), 논 블로킹 소켓(Non-Blocking Socket)

chogyujin 2022. 11. 24. 01:42
728x90

오늘은 블로킹 소켓 과 논 블로킹 소켓에 대해 알아보겠습니다.


1.  블로킹과 논 블로킹

이것은 제가 예전에 개시했던 동기 비동기 블로킹 논블로킹 을 보시고 오시는걸 추천드립니다.

https://chogyujin-study.tistory.com/51

 

블로킹(Blocking), 논 블로킹(Non-Blocking), 동기(Sync), 비동기(ASync)

오늘은 블로킹, 논 블로킹 추가로 동기, 비동기에 대해 알아보겠습니다. 동기&비동기 vs 블로킹&논블록킹 개념 차이 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들

chogyujin-study.tistory.com


2.  블로킹 소켓

블로킹 소켓은 소켓 함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태가 되는 것을 말합니다.

 

소켓 함수는 리턴하지 않으므로 멀티스레드를 사용하여 다른 작업을 하지 않는 한 애플리케이션은 더이상 진행이 안됩니다.

socket()함수는 기본적으로 블로킹 소켓입니다.

보통 1:1 통신을 할때 사용됩니다.

 


3.  논 블로킹 소켓

논 블로킹 소켓은 소켓 함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행 할 수있습니다.

loctlsocket()함수를 호출해야만 논 블로킹 소켓으로 바꿀수 있습니다.

논 블로킹 소켓은 WSAGetLastError()함수를 통해 반드시 오류코드를 확인해야 합니다.

이는 만족하지 않고 넘어간 것으로 나중에 다시 소켓 함수를 호출하면 됩니다.

 

그래서 논 블로킹 소켓은 에러를 계속 확인을 해줘야하기때문에 구현하기가 더 힘듭니다.

 


4.  논 블로킹 소켓 장&단점

장점 단점
소켓 함수 호출 시 블록되지 않으므로 다른 작업을 진행 할 수 있다.
멀티스레드를 사용하지 않고 여러 개의 입출력을 처리 할 수 있다.
소켓 함수를 호출할 때마다 WSAEWOULDBLOCK등 오류 코드를 확인하고, 다시 해당 함수를 호출해야하므로 프로그램 구조가 복잡해진다.
블로킹 소켓을 사용한 경우보다 CPU사용륭이 높다.

5.  이상적인 소켓 입출력 모델

  1. 모든 Client가 접속이 성공한다.
  2. Server는 각 Client의 서비스 요청에 최대한 빠르게 반응하며 고속으로 데이터를 전송한다.
  3. 위와 같은 기능을 제공하되 시스템 자원 사용량을 최소화한다. 즉 CPU 사용률이나 메모리 사용량등을 최소화 한다.

6.  소켓 입출력 모델에 요구되는 사항

  1. 소켓 함수 호출 시 블로킹을 최소화 한다.
  2. 입출력 작업을 다른 작업과 병행한다.
  3. Thread 개수를 최소화한다. ->생성시 1mb의 메모리가 할당 너무 큼
  4. 유저모드와 커널모드 전환 횟수와 데이터 복사를 최소화 한다.

7.  Ref

http://karlsenchoi.blogspot.com/2011/02/vs.html

 

블로킹 소켓 VS 넌블로킹 소켓

■ 소켓모드 소켓은 소켓 함수 호출시 동작 방식에 따라 블로킹과 넌블로킹 소켓으로 구분하며 이를 소켓모드라고 부른다. ○ 블로킹 소켓 소켓 함수 호출 시 조건이 만족되지 않으면 함수는 리

karlsenchoi.blogspot.com

 

'개발자 면접 공부 > 네트워크&DB' 카테고리의 다른 글

소켓(socket) 통신  (0) 2022.11.24
SQL vs NoSQL  (0) 2022.09.05
IOCP 서버  (0) 2022.08.16
REST, REST API, RESTFul API  (0) 2022.08.09