I/O 멀티 플렉싱 (레벨 트리거)
1개의 프로세스로 여러 파일 디스크립터를 감시 한다.
select와 poll이 있다.
시그널 기반 I/O (에지트리거)
입력 데이터가 있거나 지정된 fd에 기록할수 있는 상태일때 커널에서 시그널을 전송 한다.
select와 poll는 감시수가 많을수록 느려지지만 시그널은 감시수가 많을수록 월등한 성능 개선 효과가 있다.
epoll
epoll도 하나의 프로세스로 여러 fd의 i/o 를 감시하지만 시그널 기반 i/o와 감시해야할 fd가 많을 때 더 좋은 성능을 제공한다.
epoll은 시그널 기반 i/o보다 장점이 많다.
1. 시그널 처리라는 복잡한 작업 필요 없음
2. 감시하려는 이벤트 종류를 지정 가능
3. 레벨, 에지 트리거 통지중 어느 방식을 사용 할 것인지 선택 가능.
4. 시그널보다 이식성이 좋음.
레벨 트리거
블로킹하지 않고 i/o시스템 호출을 수행 할 수 있도록 fd가 준비된 경우
fd가 준비되었으면 i/o를 수행 결과에 따라 fd에 i/o를 수행하는 동작을 반복 할 수 있다.
에지 트리거
최근 감시 이후 fd에 i/o활동이 발생한 경우
i/o 이벤트가 발생한 경우에만 통지를 받음.
그러인해 통지를 받고 적절히 i/o를 수행하지 않으면 일부 i/o를 수행할 기회를 놓칠 수 있다.
에지 트리거를 쓸때는 fd를 블로킹 방식보다는 비블로킹 방식으로 쓰는게 더 좋다. 이렇게 하면 i/o이벤트를 받은 응용 프로그램은 read,write같은 EAGAIN이나 EWOULDBLOCK등 에러를 발생시키며 실패할때까지 I/O를 반복한다.
'프로그래밍 > 리눅스' 카테고리의 다른 글
I/O - poll (0) | 2013.03.25 |
---|---|
I/O - select (0) | 2013.03.24 |
프로세스 (0) | 2013.03.24 |
파일디스크립터.. (0) | 2013.03.24 |
소켓 : 유닉스 도메인 (0) | 2013.03.20 |