2017-05-27 4 views
0

Ich habe ein grundlegendes Wissen von here über epoll. Ich weiß, dass epoll mehrere FDs überwachen und damit umgehen kann.
epoll: muss ich Multithreading verwenden

Meine Frage ist: Kann ein schweres Ereignis den Server blockieren, so muss ich Multithreading verwenden?

Zum Beispiel überwacht der epoll eines Servers 2 Sockets A und B. Jetzt A beginnt, viele Nachrichten an den Server zu senden, damit der Server beginnt, sie zu lesen. Eine Sekunde später beginnt B Nachrichten zu senden, während A noch sendet. In diesem Fall benötige ich einen Thread für diese Leseaktionen? Wenn nicht, bedeutet das, dass der Server keine Möglichkeit hat, die Nachrichten von B zu erhalten, bis A das Senden beendet hat?

Antwort

0

Wenn Sie eingehende Nachrichten schnell genug verarbeiten können (keine blockierenden Aufrufe, keine schweren Berechnungen), benötigen Sie keinen separaten Thread. Andernfalls würden Sie von Multi-Threading profitieren.

In jedem Fall hilft es zu verstehen, was passiert, wenn Sie nur einen Thread haben und Sie Nachrichten nicht schnell genug verarbeiten können. Wenn Sie mit dem TCP-Protokoll arbeiten, reduzieren die Maschinen, die Ihnen die Daten senden, einfach ihre Übertragungsrate. Wenn Sie UDP verwenden, werden einige eingehende Pakete verworfen.

Verwandte Themen