Hi Leute,

in unserer Software wird poll() als Alternative zu select() zum Abfragen von Events auf Filedeskriptoren genutzt. Dazu läuft, wenn poll() mit > 0 zurückkehrt, eine for-Schleife über alle Deskriptoren zwischen 3 und fd_max (fd_max ist der höchste Deskriptor, der bisher von der Software geöffnet wurde).

Code:
int x = poll(fds, ...);
if(x > 0)
{
  int checked_fds = 0;
  for(int i=3; i < fd_max; i++)
  {
    if( fds[i].revents != 0 )
    {
      ... ; // fd hat ein Event
      checked_fds++;
    }
    if(checked_fds >= x) break;
  }
}
Je mehr Filehandles auf diese Weise geprüft werden, umso mehr CPU Last macht das System. Da dies in einer Sekunde recht häufig aufgerufen wird, erhöht sich die Last noch weiter.

Logisch! Da die Kontrolle in einer solchen Schleife nicht an das System zurückgegeben wird, nimmt sich der Prozess die CPU-Zeit, die er braucht, um die Schleife abzuarbeiten...

Gibt es andere Methoden, Vorgehensweisen, um ein Array von Filehandles nach poll() abzufragen? Eventuell sogar, ohne Schleifen benutzen zu müssen?

Gibt es Wege, die CPU Last hierbei zu reduzieren, ohne in den zeitlichen Ablauf des Programms einzugreifen (sleep o.ä., und alles, was Performance kostet)?

Danke!

Grüße,
Hendrik