Linux -- epoll 이벤트 모델 상세 설명
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 만 옮 겨 다 니 면 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.