Ruby-Socket-Leistungsmerkmale

8

Ich führe wiederholte send / recv-Aufrufe auf TCP-Sockets in Ruby durch und habe signifikante Geschwindigkeitsunterschiede zwischen zwei Socket-Verwendungen gefunden --- einfach gesagt, die Wiederverwendung eines Sockets erweist sich als langsamer als fortwährendes Schließen und wiedereröffnen.

Der Server ist also:

%Vor%

Es gibt einfach die Anfrage zurück an den Client.

Client 1 verbindet sich jedes Mal neu:

%Vor%

Client 2 hält seinen Socket geöffnet:

%Vor%

Das Ergebnis der Ausführung dieses Codes ist wie folgt:

%Vor%

Es ist mein Verständnis, dass die Wiederverwendung eines Sockels mir Zeit sparen sollte (nicht 347 mal länger!). Ich habe versucht, IO#flush nach dem Schreiben in Sockets aufzurufen, aber das macht keinen Unterschied. Die Deaktivierung des Nagle-Algorithmus hilft in gewissem Maße, aber nicht annähernd genug.

Was würde dazu führen, dass der obige Code (läuft unter Linux 3.8.5 und ruby ​​2.0.0) mit einer so großen Geschwindigkeitsdiskrepanz ausgeführt wird, und wie kann ich das beheben?

    
Stephen Wattam 27.05.2013, 16:10
quelle

1 Antwort

7

Das Deaktivieren des Nagle-Algorithmus auf den Client- und Server-Sockets behebt dies:

%Vor%

Ergebnis:

%Vor%

Hoffe das hilft jemandem.

    
Stephen Wattam 27.05.2013, 16:41
quelle

Tags und Links