epoll의 에지 트리거링 옵션의 용도는 무엇입니까?
epoll의 man 페이지에서:
epoll is a variant of poll(2) that can be used either as an edge-triggered
or a level-triggered interface
에지 트리거 옵션은 언제 사용합니까?man 페이지는 그것을 사용하는 예를 제시하지만, 왜 그것이 필요한지 모르겠다.
FD가 읽기 또는 쓰기 준비가 되면 모든 데이터를 즉시 읽기(또는 쓰기)할 필요는 없습니다.
레벨 트리거 에폴은 FD가 준비되는 한 계속 잔소리를 하지만 엣지 트리거된 에폴은 다음 번이 올 때까지 사용자를 방해하지 않습니다.EAGAIN
(따라서 코드화하기가 더 복잡하지만 필요한 작업에 따라 더 효율적일 수 있습니다).
리소스에서 FD로 쓰고 있다고 가정해 보십시오.해당 FD가 쓰기 준비가 되는 데 관심이 있는 경우 레벨 트리거로 등록되면 FD가 아직 쓰기 준비가 되었다는 알림이 계속 표시됩니다.리소스를 아직 사용할 수 없는 경우에는 더 이상 쓸 수 없기 때문에 웨이크업(wake up)이 낭비됩니다.
대신 에지 트리거로 추가할 경우 FD가 한 번 쓰기 준비가 되었다는 알림이 표시되고 다른 리소스가 준비되면 가능한 한 많이 쓰십시오.그럼 만약에write(2)
돌아온다EAGAIN
쓰기를 중지하고 다음 알림을 기다립니다.
읽고 싶은 것을 할 준비가 되기 전에(따라서 버퍼링해야 하는 등) 모든 데이터를 사용자 공간에 풀링하고 싶지 않을 수 있기 때문에 읽기에도 마찬가지입니다.에지 트리거 epoll을 사용하면 읽을 준비가 되면 이를 기억하고 실제 판독을 "as and time" 수행할 수 있습니다.
제 실험에서 ET는 종종 한 개의 스레드만 웨이크업한다고 보장하지 않습니다.EPOLLONESHOT 플래그는 이 목적을 위한 것입니다.
언급URL : https://stackoverflow.com/questions/9162712/what-is-the-purpose-of-epolls-edge-triggered-option
'programing' 카테고리의 다른 글
vue 라우터로 소품으로 오브젝트를 건네주는 방법 (0) | 2022.07.07 |
---|---|
Spring Boot에서 SQL 문을 기록하는 방법 (0) | 2022.07.07 |
계산된 vue에서 화살표 사용 기능이 작동하지 않음 (0) | 2022.07.07 |
Java에서 List를 int[]로 변환하려면 어떻게 해야 합니까? (0) | 2022.07.07 |
왜 기억에 쓰는 것이 읽는 것보다 훨씬 느릴까요? (0) | 2022.07.07 |