Tuuna Computer Science

[C++] Level Trigger vs Edge Trigger with EPOLL 본문

C++

[C++] Level Trigger vs Edge Trigger with EPOLL

GuTTe 2022. 1. 29. 20:24

Edge Trigger vs Level Trigger

예전에 공부할땐 이 둘이 뭔 차이인지도 몰랐고 어떤 상황에서 쓰이는가에 대한 생각조차 하지 않았지만 최근 채팅 서버를 epoll과 thread를 사용해서 구현하는 과정에서 클라이언트의 EPOLLIN 이벤트에 맞서서 큐에 넣고 thread가 처리하기를 원했다. 하지만 thread에 값을 넣고 thread가 처리하기 까지 계속해서 EVENT통지를 해서 문제가 생겼다. 이게 바로 Level Trigger이다. 즉, 데이터가(이벤트가)존재한다면 계속해서 알림을 보내는것이다. 이것에 반하여 Edge Trigger는 이벤트가 발생하는(EPOLLIN)즉시에만 알림을 보내고 그 뒤로는 보내지 않는다. 이로서 차근차근 thread를통해 즉시가 아닌 준비작업을 마치고 읽을 수있게 된다.

추가) EPOLLONESHOT 플래그를 사용하면 해당 파일디스크립터에 대해 한번만 모니터링을 하게 한다.

Comments