에서 "유닉스 환경에서 고급 프로그래밍" , W. 리처드 스티븐스는 성능 최적화 말한다 :
우리가 가장 관심있는 디스크립터를 지정함으로써, 커널은 세 개의 디스크립터 세트에서 사용되지 않는 비트 수백 개를 거치지 않고 켜져있는 비트를 찾습니다.
(399 페이지 1 판)
모든 종류의 UNIX 시스템 프로그래밍을 수행하는 경우 APUE 서적을 적극 권장합니다.
최신 정보
은 fd_set
일반적으로 1024 파일 설명까지 추적 할 수 있습니다.
어느 fds
것이 설정되어 0
있고 어떤 것이 설정되어 있는지 추적하는 가장 효율적인 방법 은 비트 세트 1
이므로 각각 fd_set
은 1024 비트로 구성됩니다.
그 수단에 각각 있도록 32 비트 시스템에서 긴 INT (또는 "단어")는 32 비트 fd_set
이다
32분의 1,024 = 32 즉.
경우 nfds
뭔가 작은 등이 많은 응용 프로그램에있을 것입니다 8 또는 16으로, 그것은 단지 명확하게 빨리 모든 (32)의 내부보고보다해야 할 첫번째 단어, 내부 볼 필요가있다.
(참조 FD_SETSIZE
와 __NFDBITS
에서 /usr/include/sys/select.h
플랫폼에 값.)
업데이트 2
함수 서명이 아닌 이유에 관해서
int select(fd_set *readfds, int nreadfds,
fd_set *writefds, int nwritefds,
fd_set *exceptfds, int nexceptfds,
struct timeval *timeout);
내 생각에 코드가 모든 인수를 레지스터 에 유지하려고 시도하기 때문에 CPU가 더 빨리 작동 할 수 있으며 추가 2 변수를 추적 해야하는 경우 CPU에 레지스터가 충분하지 않을 수 있습니다.
즉, select
구현 세부 사항을 더 빨리 노출 할 수 있도록 구현 세부 정보를 노출시키는 것입니다.