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

+ Recent posts