SORU
24 HAZİRAN 2011, Cuma


Epoll () yok, O işini(1)?

Wikipedia diyor

eski sistem çağrıları, aksine O(n) de çalışır, epoll arasında çalışır Ç(1) [2]).

http://en.wikipedia.org/wiki/Epoll

Ancak, fs/adresinden kaynak kodu eventpoll.c Linux-2.6.38, (logN) O hangi arama için RB bir ağaç ile gerçekleştirilir görünüyor

/*
 * Search the file inside the eventpoll tree. The RB tree operations
 * are protected by the "mtx" mutex, and ep_find() must be called with
 * "mtx" held.
 */
static struct epitem *ep_find(struct eventpoll *ep, struct file *file, int fd)
{

Aslında, herhangi bir adam sayfa epoll karmaşıklığı söyleyerek göremedim (O) (1). Neden O(1) olarak bilinir.

CEVAP
25 HAZİRAN 2011, CUMARTESİ


Bu ep_find için bir kez uygulaması yapar. Ben sadece birkaç dakika geçirdim ve ep_find epoll_ctl olarak görüyorum.

Tanımlayıcıları (EPOLL_CTL_ADD) eklediğinizde, bu yüzden gerçekten, bu pahalı işlem yapılır. AMA ne zamanasıl iş(epoll_wait) değil. Sadece başlangıçta tanımlayıcıları ekleyin.

Sonuç olarak, epoll sistem çağrısı yok beri epoll, karmaşıklığı sormak yeterli değil. epoll_ctl, epoll_wait vb bireysel karmaşıklığı istiyorum.

Diğer şeyler

select önlemek epoll kullanmak için başka sebepler de var. Kullanarak seçin, birçok tanımlayıcıları dikkat edilmesi gereken bilmiyorsun. En büyük parça ve döngü tutmak gerekir.

rc = select(...);
/* check rc */
for (s = 0; s <= maxfd; s  ) {
    if (FD_ISSET(s)) {
        /* ... */
    }
}

Şimdi epoll ile çok daha temiz

nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
/* check nfds */
for (n = 0; n < nfds;   n) {
    /* events[n].data.fd needs attention */
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • mist64

    mist64

    30 Mayıs 2006