멀티 프로세스 -> 멀티 스레드
select -> epoll(리눅스), iocp(window)
멀티 프로세스 서버의 단점
- 프로세스의 빈번한 생성은 성능은 저하
- 멀티 프로세스의 흐름을 고려해서 구현해야 하기 때문에 구현이 쉽지 않다.
- 프로세스간 통신이 필요한 상황에서는 서버의 구현이 더 복잡해진다.
멀티 프로세스 서버의 대안
- 하나의 프로세스가 다수의 클라이언트에게 서비스 할 수 있도록 한다
- 이를 위해서는 하나의 프로세스가 여러 개의 소켓을 핸들링 할 수 있는 방법이 존재 해야 한다.
- 바로 이것이 IO 멀티플렉싱이다.
멀티 플렉싱의 의해
- 기존 멀티 프로세스에서는 클라이언트 갯수 만큼 프로세스를 1대1로 대응 시켰지만, 멀티 플렉싱은 하나의 프로세스에서 다수의 클라이언트 접속을 처리 한다(하나의 리소스를 통해서)
select 모델 flow
-> 멀티플렉싱
-> 다수 클라이언트 fd를 하나의 프로세스가 관리 해야 한다
-> 게임을 예로 들면 서버-클라이언트 사이에서 처리할 데이터의 크기가 굉장히 작기 때문에 하나의 프로세스에서도 충분히 처리가 가능하다 때문에 하나의 프로세스가 모든 클라이언트 요청을 처리하는 것이 '프로세스를 여러개 만드는 것보다' 효율적일 수 있다.
-> 다수의 클라이언트 소켓 fd를 저장할 fd_set 자료구조가 존재
-> fd_set에 클라이언트 소켓 fd를 등록
-> select() 함수를 통해서 fd_set에 변경된 데이터가 있으면 값을 반환한다(그전 까진 블로킹 상태)
-> 변경된 fd 정보 하나에는 나머지는 다 리셋된다.
-> 해당되는 fd를 찾아서)(fd_set을 반복문을 통해서 찾아야 한다.) 이용 read/write
-> 다시 fd_set에 fd를 등록하고 다시 select() 함수 호출 후 대기(블로킹)
fd_set 관련 함수
FD_ZERO
FD_SET
FD_CLR
FD_ISSET
'Network' 카테고리의 다른 글
[인강/윤성우/TCP/IP 소켓 프로그래밍] 프로세스간 통신 (0) | 2022.03.08 |
---|---|
[인강/윤성우/TCP/IP 소켓 프로그래밍] 멀티 프로세스 기반의 서버 (0) | 2022.03.04 |
[인강/윤성우/TCP/IP 소켓 프로그래밍] 소켓의 다양한 옵션 (0) | 2022.03.03 |
[인강/윤성우/TCP/IP 소켓 프로그래밍] 도메인 이름과 인터넷 주소 (0) | 2022.03.02 |
[인강/윤성우/TCP/IP 소켓 프로그래밍] TCP half close (0) | 2022.03.02 |