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_set
genellikle 1024'e kadar dosya tanımlayıcıyı izleyebilir.
Hangi fds
ayarlanmış 0
ve ayarlanmış olan izlemenin en etkili yolu 1
bir fd_set
bit kümesidir , bu nedenle her biri 1024 bitten oluşur.
32 bit sistemde, uzun bir int (veya "word") 32 bittir, yani her fd_set
biri
1024/32 = 32 kelime anlamına gelir .
Eğer nfds
bir ş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_SETSIZE
ve __NFDBITS
gelen /usr/include/sys/select.h
senin 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, select
daha hızlı olabilmesi için bir uygulama detayını ortaya koyuyor.