728x90
오늘은 블로킹 소켓 과 논 블로킹 소켓에 대해 알아보겠습니다.
1. 블로킹과 논 블로킹
이것은 제가 예전에 개시했던 동기 비동기 블로킹 논블로킹 을 보시고 오시는걸 추천드립니다.
https://chogyujin-study.tistory.com/51
2. 블로킹 소켓
블로킹 소켓은 소켓 함수 호출 시 조건이 만족되지 않으면 함수는 리턴하지 않고 해당 스레드는 대기 상태가 되는 것을 말합니다.
소켓 함수는 리턴하지 않으므로 멀티스레드를 사용하여 다른 작업을 하지 않는 한 애플리케이션은 더이상 진행이 안됩니다.
socket()함수는 기본적으로 블로킹 소켓입니다.
보통 1:1 통신을 할때 사용됩니다.
3. 논 블로킹 소켓
논 블로킹 소켓은 소켓 함수 호출 시 조건이 만족되지 않더라도 함수가 리턴하므로 해당 스레드는 계속 진행 할 수있습니다.
loctlsocket()함수를 호출해야만 논 블로킹 소켓으로 바꿀수 있습니다.
논 블로킹 소켓은 WSAGetLastError()함수를 통해 반드시 오류코드를 확인해야 합니다.
이는 만족하지 않고 넘어간 것으로 나중에 다시 소켓 함수를 호출하면 됩니다.
그래서 논 블로킹 소켓은 에러를 계속 확인을 해줘야하기때문에 구현하기가 더 힘듭니다.
4. 논 블로킹 소켓 장&단점
장점 | 단점 |
소켓 함수 호출 시 블록되지 않으므로 다른 작업을 진행 할 수 있다. 멀티스레드를 사용하지 않고 여러 개의 입출력을 처리 할 수 있다. |
소켓 함수를 호출할 때마다 WSAEWOULDBLOCK등 오류 코드를 확인하고, 다시 해당 함수를 호출해야하므로 프로그램 구조가 복잡해진다. 블로킹 소켓을 사용한 경우보다 CPU사용륭이 높다. |
5. 이상적인 소켓 입출력 모델
- 모든 Client가 접속이 성공한다.
- Server는 각 Client의 서비스 요청에 최대한 빠르게 반응하며 고속으로 데이터를 전송한다.
- 위와 같은 기능을 제공하되 시스템 자원 사용량을 최소화한다. 즉 CPU 사용률이나 메모리 사용량등을 최소화 한다.
6. 소켓 입출력 모델에 요구되는 사항
- 소켓 함수 호출 시 블로킹을 최소화 한다.
- 입출력 작업을 다른 작업과 병행한다.
- Thread 개수를 최소화한다. ->생성시 1mb의 메모리가 할당 너무 큼
- 유저모드와 커널모드 전환 횟수와 데이터 복사를 최소화 한다.
7. Ref
http://karlsenchoi.blogspot.com/2011/02/vs.html
'개발자 면접 공부 > 네트워크&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 |