2011-06-15 2 views
2

성능 측면에서 어느 것이 더 낫습니까? 선택/폴링 또는 비동기 I/O? 필자가 이전에 사용한 select/poll은 반복적으로 커널에 데이터를 요청하는 반면 비동기 I/O는 데이터 가용성에 대한 커널의 알림에 의존합니다. 그러나 select/poll도 커널 알림에 의존한다는 것을 알고 있습니다. 따라서 성능 측면에서 볼 때 둘 다 같습니다. 유일한 차이점은 선택/폴링 블록 인 반면 비동기 I/O는 그렇지 않습니다. 나는 맞습니까? 나는 무엇인가 놓치고 있습니까?선택/폴링 대 비동기 I/O의 성능

답변

-1

비동기 I/O에서는 주기적으로 루프를 반복하여 주기적으로 읽을 새 데이터가 있는지 확인해야합니다. 이로 인해 CPU가 많이 사용됩니다. CPU 전원을 사용하지 않고 블록을 선택/폴링합니다. 내부적으로 루프되지 않습니다.

2

select/poll도 준비된 파일 개발자에 대한 커널 알림에 의존합니다. 그러나 select/poll의 단점은 Systemcall-Handler가 Kernel-Space에서 실행되기 때문에 호출되는 즉시 차단된다는 것입니다.

실제 비동기 I/O는 Linux의 LibAIO와 Windows의 IOCP를 통해 이루어집니다. 내가 아는 한 그들은 User Space에서 호출 프로세스/스레드를 차단하지 않으며 실제 overlapped I/O를 허용합니다.

즉 비동기 논 블로킹 I/O (LibAIO & IOCP)는 호출 스레드를 차단하지 않고 실제 겹친 I/O를 허용하기 때문에 빠릅니다. 선택/폴링도 비동기식이지만 비동기식 차단입니다. 그리고 btw 선택 및 설문 조사는 다른 특정 문제로 고통 받아서 규모가 잘 맞지 않습니다.

희망은 내가 도와 줄 수 있습니다. (나는 이것에 너무 초짜 다 :))