Multiplexing
- 하나의 통신 채널을 통해서 둘 이상의 데이터를 전송하는 데 사용되는 기술
- 물리적 장치의 효율성을 높이기 위해서 최소한의 물리적인 요소만 사용해서 최대한의 데이터를 전달하기 위해 사용되는 기술
- Multiplexing을 서버에 적용하면 필요한 프로세스의 수를 줄일 수 있다. 클라이언트의 숫자와 상관없이 서버에서 서비스를 제공하는 프로세스의 수는 딱 하나이다.
System Call
- 응용프로그램에서 운영체제에게 시스템 자원을 요청하는 하나의 수단.
- System Call을 요청하면 제어가 kernel로 넘어가 내부적으로 각 System Call을 구분하기 위해 기능별로 고유한 번호를 할당해 놓는다.
- 번호에 맞는 서비스 루틴을 호출하여 처리한 후 사용자로 넘어온다.
- 프로세스 제어, 파일 조작, 장치 관리, 시스템 정보 및 자원 관리, 통신 관련 등이 있다.
Select
- 등록된 FD를 전부 체크해야 하고 커널과 유저 공간 사이의 여러 번의 데이터 복사가 발생한다.
- 제한된 FD를 사용한다.
- 사용이 쉽고 이식성이 좋다.
Poll
- Select와 서의 동일하지만 FD의 개수가 무제한이다.
- low level의 처리로 시스템 콜의 호출이 Select보다 적다.
- Select는 3bit, poll은 64bit로 양이 커지면 Select보다 성능이 떨어질 수밖에 없다.
Epoll
- Linux 2.6.x이상 버전에서만 지원된다.
- FD의 개수는 무제한이다.
- Select, Poll은 FD를 직접 관리하지만, Epoll은 kernel에서 관리된다.
- 그렇기에 매번 FD의 정보를 보내주지 않아도 괜찮다.
- 또한, kernel과 유저스페이스 간의 통신 오버헤드가 대폭 줄어든다.
Kqueue
- Epoll은 Linux에서 사용되지만 Kqueue는 BSD계열의 Epoll이다.(유닉스 계열)
Libevent
- FD에서 이벤트가 발생했을 때 지정된 콜백 함수를 실행해주는 라이브러리이다.
- 시스템마다 서로 다른 I/O Multiplexing Method를 추상화시켜 준다.
'42일기' 카테고리의 다른 글
inception (0) | 2022.10.24 |
---|---|
kqueue의 사용법 (0) | 2022.07.23 |
ft_containers[Red-Black Tree] (1) | 2022.04.29 |
ft_containers[Map] (0) | 2022.04.26 |
CPP [템플릿] (0) | 2022.03.02 |