In "UNIX Çerçevesinde İleri Programlama" , W. Richard Stevens, bir performans optimizasyonu olduğunu söylüyor:
Çekirdek, ilgilendiğimiz en yüksek tanımlayıcıyı belirterek, üç tanımlayıcı kümesinde yüzlerce kullanılmamış bit kullanmaktan kaçınabilir, açık olanları arar.
(1. baskı, sayfa 399)
Herhangi bir UNIX sistemi programlaması yapıyorsanız, APUE kitabı önemle tavsiye edilir.
GÜNCELLEŞTİRME
Bir fd_setgenellikle 1024'e kadar dosya tanımlayıcıyı izleyebilir.
Hangi fdsayarlanmış 0ve ayarlanmış olan izlemenin en etkili yolu 1bir fd_setbit kümesidir , bu nedenle her biri 1024 bitten oluşur.
32 bit sistemde, uzun bir int (veya "word") 32 bittir, yani her fd_setbiri
1024/32 = 32 kelime anlamına gelir .
Eğer nfdsbir şey küçük, böyle birçok uygulamada olacağını 8 veya 16 gibi, sadece açıkça daha hızlı bütün 32'den içine bakarak daha olmalı 1 sözcüğü, içine bakmak için ihtiyacı var.
(Bkz FD_SETSIZEve __NFDBITSgelen /usr/include/sys/select.hsenin platformda değerler için.)
GÜNCELLEME 2
İşlev imzasının neden olmadığı
int select(fd_set *readfds, int nreadfds,
fd_set *writefds, int nwritefds,
fd_set *exceptfds, int nexceptfds,
struct timeval *timeout);
Tahminime göre, kod kayıtlardaki tüm argümanları tutmaya çalıştığından , bu nedenle CPU kendi üzerinde daha hızlı çalışabilir ve eğer fazladan bir 2 değişken izlemek zorunda kalırsa, CPU yeterli kayıtlara sahip olmayabilir.
Başka bir deyişle, selectdaha hızlı olabilmesi için bir uygulama detayını ortaya koyuyor.