에폴

epoll

epoll 는 Linux [1]커널 버전 2.5.44에서 처음 도입된 확장 가능한 I/O이벤트 알림 메커니즘에 대한 Linux 커널 시스템 호출입니다.이 기능은 여러 파일 기술자를 모니터링하여 I/O가 가능한지 여부를 확인하는 것입니다.오래된select(2) POSIX를 대체하고poll(2) 감시되는 파일 기술자의 수가 많은 애플리케이션(O(n)시간에 동작하는 오래된 시스템 호출과는 달리)에서 보다 높은 성능을 얻기 위해 시스템 호출을 실행합니다.epollO(1)시간[2] 에 동작합니다.

epollFreeB와 비슷합니다.SD는 일련의 사용자 공간 함수로 구성되어 있으며, 각각 구성 가능한 커널 개체를 나타내는 파일 기술자 인수를 사용합니다.이것에 대해, SD는 공동으로 동작합니다. epoll Red-Black Tree(RB 트리) 데이터 구조를 사용하여 현재 [3]감시되고 있는 모든 파일 기술자를 추적합니다.

API

인트 epoll_create1(인트 플래그); 

작성하다epollobject 및 해당 파일 기술자를 반환합니다.flags파라미터를 지정하면 epoll 동작을 변경할 수 있습니다.유효한 값은 1개뿐입니다.EPOLL_CLOEXEC.epoll_create()의 오래된 변종입니다.epoll_create1()는 Linux 커널 버전 2.6.27 및 glibc 버전 2.[4]9에서 권장되지 않습니다.

인트 epoll_ctl(인트 epfd, 인트 동작, 인트 fd, 구조 epoll_이벤트 *이벤트); 

이 오브젝트가 감시하는 파일 기술자 및 이벤트를 제어(설정)합니다. opADD, MODIFY 또는 DELETE 중 하나입니다.

인트 epoll_wait(인트 epfd, 구조 epoll_이벤트 *이벤트, 인트 최대 이벤트, 인트 타임아웃); 

에 등록된 이벤트 중 하나를 기다립니다.epoll_ctl적어도 1회 이상 발생하거나 타임아웃이 경과할 때까지.에서 발생한 이벤트를 반환합니다.events,까지maxevents즉시.

트리거 모드

epoll엣지 모드와 레벨모드의 양쪽 모두를 제공합니다.엣지 트리거 모드의 경우,epoll_wait에 새로운 이벤트가 큐잉되어 있는 경우에만epolllevel-timeout 모드일 경우,epoll_wait상태가 유지되는 한 돌아올 것입니다.

를 들어 파이프가 에 등록된 경우epoll데이터 수신, 에의 콜epoll_wait이 반환되어 읽을 데이터가 있음을 알립니다.판독기가 버퍼에서 데이터의 일부만 소비했다고 가정합니다.레벨 트리거 모드에서는, 다음의 콜이 행해집니다.epoll_wait파이프의 버퍼에 읽을 데이터가 포함되어 있는 한, 는 즉시 반환됩니다.단, 에지 트리거 모드에서는epoll_wait는 파이프에 새 데이터를 쓴 후에만 반환됩니다.

비판

브라이언 캔트릴은 다음과 같이 지적했다.epoll님은 이전 버전인 입력/출력 완료 포트, 이벤트 포트(Solaris) 및 [5]kqueue로부터 배웠다면 피할 수 있는 실수가 있었습니다.하지만, 그의 비판의 상당 부분은 에 의해 다루어졌다.epollEPOLLONESHOT그리고.EPOLLEXCLUSIVE옵션들. EPOLLONESHOT는 2004년 2월에 출시된 Linux 커널 메인라인 버전 2.6.2에 추가되었습니다. EPOLLEXCLUSIVE는 2016년 [6]3월에 출시된 버전 4.5에 추가되었습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "epoll(7) - Linux manual page". Man7.org. 2012-04-17. Retrieved 2014-03-01.
  2. ^ Oleksiy Kovyrin (2006-04-13). "Using epoll() For Asynchronous Network Programming". Kovyrin.net. Retrieved 2014-03-01.
  3. ^ "The Implementation of epoll (1)". idndx.com. Archived from the original on 2017-08-10.
  4. ^ Love, Robert (2013). Linux System Programming (Second ed.). O’Reilly. pp. 97, 98. ISBN 978-1-449-33953-1.
  5. ^ GhostarchiveWayback Machine에서 아카이브:
  6. ^ "Epoll is fundamentally broken 1/2". idea.popcount.org. 2017-02-20. Retrieved 2017-10-06.

외부 링크