1. epoll
1.1. epoll 기초
- 입출력 다중화(select)의 단점 : 비트 테이블의 변화를 체크하기 위해 매번 처음부터 끝까지 탐색을 해야함
- epoll은 관심있는 파일 목록을 pool에 유지함
- pool에 있는 파일에 데이터 벼화가 생기면 이벤트가 발생하며, 이벤트를 받은 프로그램은 pool에서 그 파일 목록을 가져올 수 있음
1.2. epoll의 작동방식
- 먼저 적당한 크기의 이벤트 풀을 생성함
- 이벤트를 관리해야하는 파일이 들이오면 이벤트 풀에 집어넣음
- 이벤트 풀에서 이벤트가 발생하기를 기다림
- 이벤트가 발생하면, 이벤트가 발생한 파일의 목록을 가져오고 읽기 및 쓰기 작업을 수행함
1.3. epoll의 사용법
- int epoll_create(int size) : 이벤트 풀의 생성
- *int epoll_ctl(int epfd, int op, int fd, struct epoll_event event) : 이벤트 풀 관리
- epfd : 이벤트 풀의 지정번호
- op : 이벤트 풀의 관리 명령 지정(EPOLL_CTL_ADD, EPOLL_CTL_MOD, EPOLL_CTL_DEL)
- event : 검사할 이벤트 종류를 지정하기 위해 사용되는 구조체(이벤트 : EPOLLIN, EPOLLOUT, EPOLLERR, EPOLLHUP)
- *int epoll_wait(int epfd, struct epoll_event events, int maxevents, int timeout) : 이벤트 대기
- events : 이벤트가 발생한 파일의 정보는 epoll_event 구조체로 넘어옴
- maxevents : 한 번에 가져올 수 있는 이벤트의 크기 지정
- timeout : 대기 시간을 ms 단위로 지정. -1을 지정하면 이벤트가 발생할 때까지 계속 대기하며, 0을 지정하면 이벤트를 기다리지 않고 즉시 반환함
1.4. epoll의 장단점
- 장점 : 멀티 스레드, 멀티 프로세스 방식에 비해 매우 효율적이며, 현재 Linux에서 사용할 수 있는 가장 빠른 입출력 처리 기술임
- 단점 : 데이터 처리에 오랜 시간이 걸리는 서비스에 적당하지 않음(해결 방법 : 스레드풀)