서버/클라이언트를 구축하기 위해선 다양한 모델들을 사용할 수 있다.
각 모델별 장-단점을 나열해보는 시간을 가져보자.
(Linux & Windows 공통)
1. 멀티프로세스 (Multi Process)
* 프로세스란 실행중인 프로그램의 메모리,리소스 등을 총칭하는 의미이다.
- 설명 : fork 함수를 통해 또 하나의 프로세스를 만든다.
- 장점 : 다른 모델과 비교했을 때 크게 장점이 없다. 자식프로세스에서 서비스를 제공하고, 부모프로세스에서는 소켓을 수락하는 역할(Listen 및 Accept)을 한다.
- 단점 : 프로그램이 너무 무거워진다. 프로세스가 여러개가 될 수록 CPU의 짐이 늘어남.
2. 멀티 쓰레드 (Multi Thread)
- 설명 : 멀티 프로세스는 프로세스가 많아질수록 CPU의 과부하가 일어날 수 있다. 멀티 쓰레드 모델은 그런 단점을 보완해줄 수 있는 모델로 클라이언트가 접속할 때마다 쓰레드를 생성하여 쓰레드가 Read/Write를 처리한다.
- 장점 : 멀티프로세스 모델에 비해, CPU 과부하가 적다. 하나의 프로세스에서 여러개의 쓰레드를 활용하는 것이기 때문이다.
- 단점 : 쓰레드가 여러 개 만들어지면, 임계영역에 대한 동기화 등의 방법으로 보호를 해야하고, 복잡성이 생긴다.
3. Select (멀티 플렉싱 I/O 모델)
* 멀티플렉싱이란 ?
- 하나의 프로세스로 여러개의 소켓을 핸들링하는 방법
- 설명 : 멀티플렉싱의 대표적인 모델이다. 하나의 프로세스로 최대 1024개의 FD를 관리할 수 있다.(커널 값을 커스텀하면 더 많은 FD 관리도 가능하다.)
- 장점 : 하나의 프로세스로 여러 소켓을 효율적으로 핸들링 가능하다, 다양한 OS에서 사용 가능한 I/O 모델이다.
- 단점 : 각 FD 이벤트 확인 유무를 전체 For문을 통해 확인해야하기 때문에 비효율적이다. 시간복잡도 : O(n)
(Only Linux)
4. Epoll (멀티 플렉싱 I/O 모델) (poll 상위호환)
- 설명 : Select 모델보다 더 발전된 형태로, 다수의 클라이언트를 받아들일 수 있으며,
이벤트가 발생한 FD만 For문으로 체크하면 되기 때문에, 더욱 효율적이다. (시간복잡도 : O(1))
- 장점 : 다수의 클라이언트 수용 가능, 엣지트리거와 레벨트리거로 이벤트발생시점 조절 가능
- 단점 : 딱히 없는 것 같다. 비교할려면 Windows I/O 모델인 IOCP와 누가 최고의 모델인가 생각해볼만 할 것 같다.
(Only Window)
5. WSA (Windows Socket Architecture) 기반 I/O 모델
소켓 I/O 모델 | 이벤트 통보방식 | 스레드 수의 제약 여부 | Overlapped 구조체 사용 여부 |
Select | FD_SET | 제한없음 | 사용안함 |
AsyncSelect | 윈도우즈 메세지 | 제한없음 | 사용안함 |
EventSelect | 이벤트 객체 | 스레드당 최대 64개 이벤트 처리 제한 | 사용안함 |
Overlapped I/O | 이밴트 객체/ 커널에서 호출 | 스레드당 최대 64개 이벤트 처리 제한 | 사용함 |
IOCP (Input Output Completion Port) | Completion Port 객체 | 제한 없음 | 사용함 |
'Tech Blog > TCP-IP' 카테고리의 다른 글
IPC란 ? (Inter-Process Communication) (0) | 2023.01.30 |
---|---|
3way HandShaking, 4way HandShaking (0) | 2023.01.30 |
빅엔디안과 리틀엔디안 (0) | 2023.01.27 |
멀티캐스팅과 브로드캐스팅 (UDP) (+ 서브넷팅) (0) | 2023.01.26 |
TCP / IP 소켓 프로그래밍 기초 다지기 (0) | 2021.07.07 |