Linux -- epoll 이벤트 모델 상세 설명

epoll 은 주로 준 비 된 fd 에 대해 폴 링 작업 을 합 니 다.
1. epoll 트리거 방식
epoll 은 ET 와 LT 두 가지 트리거 방식 을 지원 합 니 다.
ET (가장자리 트리거):
Nginx 는 ET 트리거 방식 을 사용 합 니 다. no - block 방식 만 지원 합 니 다. fd 버퍼 가 준비 되 었 을 때 한 번 만 이벤트 트리거 를 보 냅 니 다. 버퍼 의 데이터 가 읽 혔 는 지, 두 번 다시 보 내지 않 습 니 다.
LT (가장자리 트리거):
no - block 과 block 두 가지 방식 을 지원 합 니 다. fd 버퍼 가 준비 되 었 을 때 버퍼 에 데이터 가 있 으 면 준비 알림 을 계속 보 냅 니 다. 
2. epoll 관련 함수:
2.1、int epoll_create(int size);
epoll 핸들 을 만 드 는 데 사용 합 니 다. epoll 핸들 을 만 든 후에 fd 설명 자 를 사용 합 니 다. 프로 세 스에 있어 서 fd 설명 자 는 / proc / 프로 세 스 id / fd / 를 볼 수 있 습 니 다. epoll 을 사용 한 후에 close 를 해 야 합 니 다. 그렇지 않 으 면 fd 가 너무 많이 소 진 될 수 있 습 니 다. 
2.2、int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
이벤트 등록 함수, fd 를 epfd 에 추가, 수정, 삭제, op 매개 변 수 를 통 해 EPOLL 수정CTL_ADD: 새로운 fd 를 epfd 에 등록 합 니 다.EPOLL_CTL_MOD: 등 록 된 fd 의 감청 사건 을 수정 합 니 다.EPOLL_CTL_DEL: epfd 에서 fd 를 삭제 합 니 다. 
2.3、int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
epoll 모니터링 을 수집 한 모든 이벤트 에서 발생 한 fd 의 수량 으로 이해 할 수 있 습 니 다. 
3. epoll 작업 원리
3.1 、 epoll 호출 중create 이후 커 널 은 이벤트 폴 레 드 블랙 트 리 구조 체 를 만 들 었 고 list 양 방향 링크 를 만 들 었 으 며 커 널 상태 에서 모니터링 이 필요 한 fd 를 받 을 준 비 를 하고 있 습 니 다.3.2 、 epoll 호출 중ctr 이후 내부 핵 상태의 eventpol 에 직접 add / mod / del 에 대응 하 는 fd 를 진행 합 니 다. 새로 추 가 된 fd 에 대해 중 복 된 fd 는 eventpol 레 드 블랙 트 리 를 통 해 식별 할 수 있 습 니 다. 사용자 상태 에서 커 널 상태 로 다시 복사 하지 않 아 도 됩 니 다. 이 과정 은 3.3 이 며 epoll 은 양 방향 list 링크 를 유지 합 니 다. epollctr 가 실 행 될 때 이벤트 폴 레 드 블랙 트 리 에 수정 을 추가 하 는 것 외 에 커 널 인 터 럽 트 함수 처리 프로그램 에 리 셋 함 수 를 등록 하여 커 널 에 이 fd 가 준비 되면 list 에 넣 으 라 고 알려 줍 니 다.3.4 、 epoll 에서wait 호출 시 이 양 방향 list 에 데이터 가 있 는 지 살 펴 보고 있 으 면 바로 처리 하면 됩 니 다. 
위조 코드
fd = socket_connect()  #        
efd = epoll_create(0)   #    epoll
epoll_ctl(efd, EPOLL_CTL_ADD, fd, &event)  #      fd    efd 
n = epoll_wait(efd, events, MAXEVENTS, -1) #  list          fd    
for i in range(n):
     ev = events[i]   #  events            fd,      
     doing(ev)

장점
5.1 fd 수량 제한 없 이 시스템 메모리 의 크기 에 달 려 있 습 니 다. 일반적으로 1GB 이면 10W 개 를 가 질 수 있 습 니 다.
5.2 커 널 과 사용자 컨트롤 은 같은 메모리, mmap 기술 을 사용 하고 사용자 상태 와 커 널 상태 간 의 복사 없 이 효율 을 향상 시 킵 니 다. 5.3. 모든 것 을 옮 겨 다 니 지 않 아 도 됩 니 다. 이미 준 비 된 fd 만 옮 겨 다 니 면 됩 니 다.

좋은 웹페이지 즐겨찾기