Performance beim pollen?



  • Performance beim pollen?

    ich muss mehrere netzwerkverbindungen abfragen und zusaetzlich auf nicht socket-basierte ereignisse reagieren (die abgefragt werden muessen). daher kann ich nicht select() verwenden.
    deshalb dachte ich daran die entpsrechenden recv() bzw. read() funktion nicht blockieren zu lassen, und sie stattdessen in einer while schleife abzufragen:

    //pseuducode, fd1..fdx steht nicht zwingend fuer einen filedescriptor.
    while(!myexit)
    {
      if (myread(fd1) >0)
        handlemyread(1);
    
      if (myread(fd2) >0)
        handlemyread(2);
    
      if (myread(fd3) >0)
        handlemyread(3);
    
      if (myrecv(fd1) >0)
        handlemyrecv(1)
    
      if (myrecv(fd2) >0)
        handlemyrecv(2);
    
      if (myrecv(fd3) >0)
        handlemyrecv(3);
    }
    

    nun meine frage(n):
    "verbrate" ich so unnoetig rechenzeit?
    wird durch die nahezu endlos whileschleife eine hohe CPU last erzeugt? (im hinblick auf ander prozesse)



  • endlos schleifen sind sehr CPU intensiv AFAIK. Aber ich versteh nicht genau, warum du nicht select nehmen kannst



  • soweit ich das verstanden habe, kann select() nur mit filedescriptoren verwendet werden und dann auchnur um anzuzeigen das gelesen werden kann.

    jedoch muss ich auch abfragen behandelen, bei denen kein fd verwendet werden kann.

    beispiel: pruefung ob dateien sich geändert haben (hatte dazu auch mal einen thread gestartet).

    p.s.die lösung mit einer while schleife finde ich auch sehr unpassend. wuerde das verwenden von threads einen performancegewinn mit sich bringen?


Anmelden zum Antworten