Forum: PC-Programmierung epoll TCP Server


von Pascal O. (raven761)


Lesenswert?

Hi,

ich wollte fragen ob jemand von euch schonmal epoll für die 
Netzwerkprogrammierung verwendet hat. Ich würde das nämlich gern für 
einen TCP Server nutzen, aber ich find keinen richtigen BeispielCode im 
Internet.. Die ManPages und google helfen mir auch nicht sehr weit!

Hat jemand von euch zufällig Code und Erfahrung damit und könnte mir 
unter die Arme greifen?

Gruß, Pascal

P.S.: Ich programmiere unter und für Linux

von Εrnst B. (ernst)


Lesenswert?

Pascal O. wrote:
> ich wollte fragen ob jemand von euch schonmal epoll für die
> Netzwerkprogrammierung verwendet hat. Ich würde das nämlich gern für
> einen TCP Server nutzen, aber ich find keinen richtigen BeispielCode im
> Internet.. Die ManPages und google helfen mir auch nicht sehr weit!

Ich würde dir vorschlagen, gleich die libevent(*) zu verwenden, statt 
direkt mit epoll zu arbeiten.

Damit bleibst du kompatibel zu anderen unix-Geschmacksrichtungen, und 
kannst z.B. (auf *BSD) kqueue statt epoll verwenden, was nochmals einen 
tick schneller ist.


*) http://monkey.org/~provos/libevent/

von Pascal O. (raven761)


Lesenswert?

hi

das geht leider nicht, da ich den code auf servern laufen lasse, auf die 
ich so keinen admin zugriff habe. auf denen ist überall linux drauf.

bisher hatte ich es mit select gemacht, aber würde es gern auf epoll 
zuschneiden, um mehr performace rauszuholen.

von Peter (Gast)


Lesenswert?

Ich kann mir kaum vorstellen, das eine umstellung von poll/select auf 
epoll wirklich die performace verändert.
Hast du ein paar mehr Infos zu epoll, was dich das vermuten lässt?

von Εrnst B. (ernst)


Lesenswert?

> Ich kann mir kaum vorstellen, das eine umstellung von poll/select auf
> epoll wirklich die performace verändert.
> Hast du ein paar mehr Infos zu epoll, was dich das vermuten lässt?

select fliegt schonmal wg. der üblichen Beschränkung auf Sockets mit 
FH<1024 raus.
und poll hat einen gewissen overhead, weil bei jedem Durchlauf die 
Datenstruktur sequentiell durchlaufen werden muss, d.h. festzustellen 
welche Sockets grad aktiv sind hat eine komplexität von O(n).
epoll hingegen O(1).
macht bei wenigen Verbindungen kaum einen Unterschied, bei >10000 
offenen TCP-Connections hingegen schon einen deutlichen.

> das geht leider nicht, da ich den code auf servern laufen lasse, auf die
> ich so keinen admin zugriff habe.

Wenn du auf den Servern select/poll verwenden kannst, lässt das darauf 
schliessen, dass du einen Compiler benutzen darfst. Das reicht auch 
schon, um die libevent zu verwenden. Die muss ja nicht unbedingt 
systemweit installiert sein, es reicht ja, wenn deine Anwendung dagegen 
linkt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.