본문 바로가기
운영체제/IO

I/O 멀티플렉싱 - 엣지 트리거, 레벨 트리거

by 정재익 2026. 5. 5.

레벨 트리거와 엣지 트리거가 있다.

레벨 트리거는 입력버퍼에 데이터가 있으면 계속 알려준다.

1000 -> 500 -> 100 -> 100

500이 될때도 알려주고

100이 될때도 알려주고 

100이 유지될때도 알려준다

 

반면 엣지 트리거는 입력버퍼로 데이터가 수신된 상황에서 딱 한번만 이벤트가 등록된다. 데이터가 남아있다고 추가로 이벤트가 등록되지는 않는다.

 

select 모델은 레벨 트리거로 동작한다.

 

엣지 트리거는 반드시 논블로킹으로 동작해야한다.

엣지 트리거의 특성상 블로킹 방식으로 동작하는 리드앤 라이트 함수의 호출을 서버를 오랜시간 멈추게 할 수 있다.

왜냐하면 소켓 입력버퍼에 데이터가 없으면 계속 블로킹이 되기 때문이다.

따라서 사전에 오류 확인 과정도 필요하다. 입력버퍼가 비어있는지 미리 확인해야한다. read함수가 -1를 반환하고 변수에 저장된 값이 EAGAIN이면 데이터가 없다는 상황이다.

 

그래서 엣지 트리거 방식은 논블로킹을 써야한다.

 

레벨 트리거 vs 엣지 트리거

엣지 트리거를 사용하면 데이터의 수신과 처리 시점을 분리할 수 있다. 엣지 트리거는 이벤트가 수신할 때 단 한번만 발생하기 때문에 처리를 미뤄도 이벤트가 계속 누적되지 않는다.

 

레벨 트리거도 가능하긴 하다 데이터가 수신된 상황에서 처리를 미루고 epoll_wait를 호출하면 된다 하지만 이벤트가 계속 누적되며 서버에 좋은 영향을 끼치지 않는다.

 

 

 

 

'운영체제 > IO' 카테고리의 다른 글

I/O 멀티플렉싱 - epoll  (0) 2026.05.05
I/O 멀티플렉싱 - select  (0) 2026.05.05