epoll 예제

이를 위한 한 가지 해결책은 이벤트 47을 처리하는 동안 epoll_ctl(EPOLL_CTL_DEL)을 호출하여 fd 13 및 close()를 삭제한 다음 관련 데이터 구조를 제거된 것으로 표시하고 정리 목록에 연결하는 것입니다. 일괄 처리에서 fd 13에 대한 다른 이벤트를 발견하면 fd가 이전에 제거되었음을 발견하고 혼동이 없습니다. 예를 들어 리눅스에서 node.js에서 웹 서버를 작성 하는 경우, 그것은 실제로 후드 아래 전자 리눅스 시스템 호출을 사용 하 여. 왜, 어떻게 설문 조사 및 선택과 다른지, 그리고 어떻게 작동하는지에 대해 이야기해 봅시다! I/O 공간이 많은 경우 다른 파일을 드레인하려고 하면 기아를 유발하는 처리되지 않을 수 있습니다. 이것은 대poll에만 국한되지 않습니다. 이벤트 캐시를 사용하거나 epoll_wait(2)에서 반환된 모든 fd를 저장하는 경우 해당 종료를 동적으로 표시하는 방법을 제공해야 합니다(예: 이전 이벤트의 처리로 인해 발생). epoll_wait(2)에서 100개의 이벤트를 수신하고 eventi #47 조건이 이벤트 #13 종료한다고 가정합니다. 구조를 제거하고 이벤트 #13 대한 fd를 닫는 경우 이벤트 캐시에 혼란을 일으키는 fd를 기다리는 이벤트가 있다고 말할 수 있습니다. epoll은 Linux 2.6에 도입된 새로운 시스템 호출입니다. 더 이상 사용되지 않습니다 선택(및 폴링)을 대체하도록 설계되었습니다.

O(n)인 이러한 이전 시스템 호출과 달리 epoll은 O(1) 알고리즘입니다. select는 감시된 파일 설명자 목록을 통해 선형 검색을 사용하며, 이 경우 O(n) 동작이 발생하지만 전자 조사는 커널 파일 구조에서 콜백을 사용합니다. epoll 인스턴스는 epoll_create 시스템 호출을 통해 만들어지며, 이 호출은 epoll 인스턴스에 파일 설명기를 반환합니다. epoll_create의 서명은 다음과 같습니다: epoll_create 시스템 호출은 새로 생성된 대폴 커널 데이터 구조에 파일 설명기를 반환합니다. 그런 다음 호출 프로세스에서 이 파일 설명기를 사용하여 i/O를 모니터링하려는 다른 파일 설명기를 epoll 인스턴스에 추가, 제거 또는 수정할 수 있습니다. 나는 이것이 당신이 epoll ()를 사용하는 방법에 대한 몇 가지 베어링을 얻는 데 도움이되기를 바랍니다. 당신은 어떤 문제, 질문이나 피드백이있는 경우 나는 당신이 코멘트를 남겨 주셔서 감사합니다! — 프로세스 A가 자식 프로세스 B를 포크하는 경우 B는 epoll 설명자인 fd9를 포함한 A의 모든 설명자들을 상속합니다. 그러나 프로세스 B의 설명자 fd0, fd1 및 fd9는 여전히 동일한 기본 커널 데이터 구조를 참조합니다. 프로세스 B의 epoll 설명자(fd9)는 프로세스 A와 동일한 관심 목록을 공유합니다. 이 2 시스템 호출은 모든 유닉스 시스템에서 사용할 수 있습니다, epoll은 리눅스 특정 동안. 기본적으로 작동 방식은 다음과 같습니다: 프로세스는 epoll_ctl을 호출하여 epoll 인스턴스에 모니터링하려는 파일 설명기를 추가할 수 있습니다. epoll 인스턴스에 등록된 모든 파일 설명자는 집합 집합 또는 관심 목록이라고 합니다.

시스템 호출의 대poll 그룹 (epoll_create, epoll_ctl, epoll_wait) 리눅스 커널 추적 하 고 4 개의 파일 설명자 (fd1, fd2, fd3 및 fd4) 등록 된 경우 여부에 대 한 업데이트를 요청 하는 파일 설명자의 목록을 제공 하 고 두 (fd2 및 fd3) 준비 epoll_wait를 호출할 때 이 두 설명자에 대한 정보만 반환됩니다. 프로세스 B가 새 오픈 호출로 fd8이 가리키는 파일을 열고 결과적으로 새 파일 설명자 (fd15)를 가져옵니다. 이제 프로세스 A가 fd8을 닫는다고 가정해 보겠습니다. 프로세스 A가 fd8을 닫았기 때문에 epoll_wait를 호출할 때 fd8의 이벤트에 대한 알림을 더 이상 받지 않는다고 가정합니다. 그러나 관심 목록이 열린 파일 설명을 모니터링하므로 그렇지 않습니다. fd15가 fd8과 동일한 설명을 가리키기 때문에(둘 다 동일한 기본 파일이기 때문에) 프로세스 A는 fd15의 이벤트에 대한 알림을 받습니다. epoll 인스턴스가 있는 프로세스에 의해 파일 설명자가 등록되면 기본 공개 파일 설명이 있는 한 설명자가 설명기를 닫더라도 해당 프로세스가 설명자의 이벤트에 대한 알림을 계속 받게 됩니다. 하나 이상의 다른 설명자(동일하거나 다른 프로세스에 속)가 여전히 참조합니다.

Comments are closed.