programing

epoll의 에지 트리거 옵션의 목적은 무엇입니까?

copyandpastes 2021. 1. 19. 08:17
반응형

epoll의 에지 트리거 옵션의 목적은 무엇입니까?


epoll의 man 페이지에서 :

epoll is a variant of poll(2) that can be used either as an edge-triggered
or a level-triggered interface

에지 트리거 옵션은 언제 사용합니까? 매뉴얼 페이지는 그것을 사용하는 예제를 제공하지만 예제에서 왜 필요한지 모르겠습니다.


FD가 읽기 또는 쓰기 준비가되었을 때 모든 데이터를 즉시 읽거나 쓸 필요는 없습니다.

Level-triggered epoll은 FD가 준비되어있는 한 계속 잔소리를하는 반면, edge-triggered는 다음에 얻을 때까지 당신을 다시 괴롭히지 않을 EAGAIN것입니다. 해야합니다).

리소스에서 FD로 글을 쓰고 있다고 가정 해 보겠습니다. 레벨 트리거로 쓰기 준비가되는 해당 FD에 대한 관심을 등록하면 FD가 아직 쓰기 준비가되어 있다는 지속적인 알림을 받게됩니다. 리소스를 아직 사용할 수없는 경우에는 더 이상 쓸 수 없기 때문에 깨어 난 낭비입니다.

대신 에지 트리거로 추가하면 FD가 한 번 쓰기 준비되었다는 알림이 표시되고 다른 리소스가 준비되면 최대한 많이 작성합니다. 그런 다음을 write(2)반환 EAGAIN하면 쓰기를 중지하고 다음 알림을 기다립니다.

읽기에도 똑같이 적용됩니다. 왜냐하면 당신이 원하는 것을 할 준비가되기 전에 모든 데이터를 사용자 공간으로 끌어 들이고 싶지 않을 수도 있기 때문입니다 (따라서 그것을 버퍼링해야하는 등). edge-triggered epoll을 사용하면 읽을 준비가되었을 때 알림을받은 다음이를 기억하고 "언제대로"실제 읽기를 수행 할 수 있습니다.


내 실험에서 ET는 종종 하나의 스레드 만 깨어나지 만 하나의 스레드 만 깨어나는 것을 보장하지 않습니다. EPOLLONESHOT 플래그는이를위한 것입니다.

참조 URL : https://stackoverflow.com/questions/9162712/what-is-the-purpose-of-epolls-edge-triggered-option

반응형