본문 바로가기

전체 글339

14. IOCP IOCP란- IOCP는 I/O Completion Port의 약자로, 비동기 I/O 처리를 효율적으로 처리하기 위한 모델. IOCP의 동작 원리- IOCP의 동작 원리는 다음과 같다. 1. Listen Socket을 만든다. (클라 접속 신호를 수신하는 소켓) (Overlapped 모델과 다른 점은 이 소켓을 비동기 소켓으로 변경해줄 필요가 없다) 2. IOCP 큐를 만든다 (CreateIoCompletionPort 함수를 사용, 인자를 어떻게 넘기느냐에 따라 동작이 달라짐)// 작업이 담기는 큐를 만든다. HANDLE iocpHandle = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);3. while루프 내부에서 accept를 통해 클라이언트가 .. 2023. 12. 11.
13. Overlapped 방식 Overlapped 방식- Overlapped 방식은 이벤트 기반, 콜백 기반 두 종류로 나눌 수 있다. - Overlapped는 비동기 + 논 블로킹 방식으로 이전의 Select 방식보다 성능적으로 뛰어나다고 알려져 있다. - 비동기는 비동기 함수를 실행한 후 대기하는게 아니라 시간이 지난 후 통지를 받는 개념으로, 반환값을 통해 데이터가 왔는지 여부를 확인한 후 오지 않았을 때 각 방식의 로직을 수행한다. - 이벤트 기반은 WSAEVENT를 통해 이벤트를 등록하고 이벤트의 상태를 체크해서 recv를 처리하는 방식 이벤트 기반/* Server.cpp */ #include "pch.h" #include "ThreadManager.h" // WSAEventSelect = WSAEventSelect가 메인 .. 2023. 12. 11.
12. Select 방식 Select 방식이란- Select 방식이란 논 블로킹 방식 중 하나로 논 블로킹 방식의 단점인 스핀락처럼 무한히 시도하는 문제와, 이중으로 에러를 체크해줘야 하는 문제를 해결하기 위한 방법 중 하나이다. - accept, recv와 같은 함수들을 호출하기 전에 해당 이벤트가 일어났는지를 체크하고 일어났으면 처리하는 식으로 로직이 구성되어 있다. 1. 읽기/쓰기/예외 중 몇 개를 관찰 대상으로 등록한다. 2. select 함수 호출 -> 관찰 시작 3. 적어도 하나의 소켓이 준비가 되면 리턴 -> 낙오자 제거 4. 남은 소켓 제거한 후 진행/* Server.cpp */ #include "pch.h" #include "ThreadManager.h" const int32 BUF_SIZE = 1000; str.. 2023. 12. 11.
11. 논 블로킹 소켓 setsockopt 란? - 소켓의 세부 옵션을 세팅하는 함수 - 소켓의 핸들, level, 옵션명, 옵션값을 인자로 받아서 해당 소켓의 상세 옵션을 세팅한다. 알아둬야 할 옵션명 - SO_KEEPALIVE : 주기적으로 해당 소켓이 살아있는지 확인하는 옵션 - SO_REUSEADDR : 서버를 내렸다가 다시 켰을 때 해당 포트가 사용중이라고 뜰 경우가 있는데, 기존에 사용하던 포트라도 사용하겠다는 옵션 - TCP_NODELAY : Nagle 알고리즘을 사용할 것인지를 설정하는 옵션 Nagle 알고리즘이란? - 데이터가 충분히 크면 보내고, 그렇지 않으면 데이터가 쌓일 때까지 대기 - 장점은 소소한 작은 패킷들이 자주 전송되면 낭비이기 때문 (데이터의 크기가 작더라도 이 패킷이 전달되기 위해 필요한 자원.. 2023. 12. 11.