본문 바로가기

네트워크, 서버/IOModel2

(IOModel)Epoll 멀티플렉싱 io 모델의 select는 아무래도 한계가 뚜렸했다. 매 순간 해당 소켓이 이벤트를 받았는지 직접 확인해 줘야 했고 커널로 감시하고자 하는 FD의 모음을 넘겨야 했다. 만약 해당 FD_SET을 처음 한번 등록하고 우리는 FD의 추가,삭제만 해주고 커널에 넘겨주지 않아도 알아서 관리해서 이벤트가 통지된 FD들만 따로 알려주면 어떨까? 이것이 바로 리눅스에서 제공하는 epoll이다. 1. epoll 과정 먼저 epoll_create(epoll 인스턴스의 사이즈)를 통해 커널이 따로 관리하는 파일디스크립터의 저장소(epoll인스턴스)를 만든다. 해당 함수의 반환은 epoll인스턴스의 fd 넘버이다. 그 후 관찰대상이 되는 fd를 등록하는 과정으로 epoll_ctl(epoll인스턴스, 추가할지 삭제할.. 2020. 10. 5.
(IOModel)멀티플렉싱 - select 멀티플렉싱이란? 여러명이서 통신할때 하나의 채널만 가지고 통신하는 방식을 말한다. 멀티쓰레드, 멀티 프로세스가 여러 채널을 만들어 통신한다면 멀티플렉싱은 하나의 프로세스, 스레드를 가지고 여러 명의 통신을 연결시킨다. 여러명이 접속할 수 있는 서버를 만들기 위해 여러 IO모델들이 사용된다. 오늘은 대표적인 멀티플렉싱 방식의 IO 모델인 select에 대해 살펴보고자 한다. 1. select 동작 과정 서버는 여러 클라이언트의 접속을 받는다. 그 후 각 클라이언트의 이벤트(데이터 수신여부, 데이터 송신가능 여부, 오류 수신 여부 등)의 이벤트가 들어옴에 따라 해당 클라이언트에게 적절한 응답을 해줘야 한다. select의 경우 먼저 FD_SET이라는 구조체를 통해 클라이언트들을 등록시킨다. 해당 구조체는 L.. 2020. 10. 5.