Coding Memo

소켓 IO 모델 장단점 정리 본문

Language/C++

소켓 IO 모델 장단점 정리

minttea25 2022. 11. 29. 18:47

Rockiss님의 게임 서버 강의에서 학습한 내용과 몇몇 인터넷 검색을 통해 정리하였다.

  Select WSAAsyncSelect WSAEventSelect Overlapped
(event)
Overlapped
(callback)
IOCP
Async/Sync IO Sync IO Sync IO Sync IO Async IO Async IO Async IO

 


 

Select

Pros - 윈도우 뿐만 아니라 Linux 계열에서도 사용이 가능함 (이식성 우수)
Cons - 호환성이 높은 만큼 성능이 다른 모델 보다 좋지 않음 (매번 fd_set 등록 필요)
- 한번에 64개의 소켓까지 사용 가능 (FD_SETSIZE = 64)
Methods 1. fd_set 초기화 (FD_ZERO)
2. socket 등록 (FD_SET)
3. select 호출
4. FD_ISSET으로 소켓와 해당 fd_set 확인

https://minttea25.tistory.com/86

 

Socket IO - Select

본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. socket을 blocking모드와 non-blocking 모드로 사용할 때, 장단점이 각각 존재했다. blocking socket은 조건이 만족

minttea25.tistory.com

 

 

WSAAsyncSelect

Pros - 소켓 이벤트를 윈도우 메시지 형태로 처리 -> GUI 애플리케이션과 잘 결합 가능
Cons - 소켓 이벤트를 윈도우 메시지 형태로 다른 윈도우 메시지랑 같이 처리해야 해서 성능 저하가 일어남
Methods -

 

 

WSAEventSelect

Pros - Select + WSAAsyncSelect 합친 형태, 성능 비교적 뛰어남
Cons - 한번에 소켓 64개까지만 사용가능
Methods 1. WSAEvent 생성 (WSACreateEvent)
2. WSAEventSelect 호출 (socket와 event, 그리고 (비트마스크용) 이벤트 종류)
3. WSAWaitForMultipleEvents로 이벤트 발생 신호 확인
4. WSAEnumNetworkEvents를 통해 확인할 이벤트 가져오기
5. 가져온 이벤트에서 확인할 디스크립터(FD_ACCEPT, FD_READ...) 체크

https://minttea25.tistory.com/87

 

WSAEventSelect

본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지난번에 사용했던 select의 단점으로는 1. 최대 개수가 얼마 안됨(64) 2. 매번 사용할 때마다 리셋하여 새

minttea25.tistory.com

 

 

Overlapped (event 기반)

Pros - Asynchronous I/O (비동기 입출력)
- 성능이 뛰어남
Cons - 한번에 소켓 64개까지 사용 가능 (초과로는 쓰레드 추가 생성 필요)
Methods 1. 비동기 모드의 소켓과 Signal을 받기 위한 WSAEvent 객체 생성
2. 비동기 함수(WSARecv, WSASend...) 호출
3. 2번 함수의 결과를 확인, pending 상태일 경우 WSAWaitForMultipleEvents를 통해 signal 상태 확인
4. WSAGetOverlappedResult로 비동기 입출력 함수 결과 확인 및 데이터 처리

https://minttea25.tistory.com/89

 

Asynchronous Socket IO - Overlapped (event, callback)

본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지난 번에는 WSASelect 모델을 이용해 Socket IO를 처리했었다. Select와 WSASelect는 결국 모두 Select를 활용하는

minttea25.tistory.com

 

 

Overlapped (callback 기반)

Pros - 성능이 뛰어남 (APC 큐 이용)
- Asynchronous I/O (비동기 입출력)
Cons - 모든 비동기 소켓 함수에서 Completion Routine 사용 불가
- 빈번한 Alertable Wait로 인한 성능 저하
- APC 큐가 쓰레드마다 있어서 하나의 쓰레드에서 관련 루틴을 모두 처리해야함
Methods 1. 비동기 모드의 소켓 생성 및 callback으로 호출할 Completion Routine 함수 준비
2. 비동기 함수(WSARecv, WSASend...) 호출
3. 2번 함수의 결과를 확인, pending 상태일 경우 입출력 함수를 호출한 쓰레드를 Alertable Wait 상태로 만들기 (SleepEx, WaitForMultipleEvents 등 이용)
4.비동기 함수 실행이 끝나면 Completion Routine 호출 (Alertable 상태로 변환)
(5. Completion Routine 호출이 모두 끝나면 해당 쓰레드는 Alertable 상태가 해제)

https://minttea25.tistory.com/89

 

Asynchronous Socket IO - Overlapped (event, callback)

본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 지난 번에는 WSASelect 모델을 이용해 Socket IO를 처리했었다. Select와 WSASelect는 결국 모두 Select를 활용하는

minttea25.tistory.com

 

 

IOCP (IO Completion Port)

Pros - 6가지 모델 중 성능이 가장 뛰어남 (별도 쓰레드에서 한번에 처리 가능)
- Asynchronous I/O
- APC 큐 대신 Completion Port로 처리
Cons - 별도의 쓰레드를 사용하므로 코딩이 조금 복잡해 질 수 있음
- 윈도우에서만 사용 가능
Methods 1. Completion Port(HANDLE) 생성
2. callback을 처리할 쓰레드 (Worker Thread) 생성
3. 소켓을 CP에 등록
4. 비동기 함수 호출
5. Worker Thread에서 비동기 I/O 실행

https://minttea25.tistory.com/90

 

Asynchronous Socket IO - IOCP

본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 이전에 나왔던 Select, Overlapped(event), Overlapped(callback)들은 장점도 있었지만 단점도 많은 기능이었다. 일반

minttea25.tistory.com

 

 

!!


참고 글 (너무너무 정리가 잘되어 있는것 같다...)

http://karlsenchoi.blogspot.com/2011/02/blog-post_3969.html

 

소켓 입출력 모델의 장단점(비교)

■ 각 모델들의 장점 Select 모델 - 모든 윈도우 버전은 물론 유닉스에서도 사용할 수 있으므로 이식성이 높다. WSAAsyncSelect 모델 - 소켓 이벤트를 윈도우 메시지 형태로 처리하므로, GUI 애플리케이

karlsenchoi.blogspot.com