Kann mir jemand sagen, welche Faktoren die Geschwindigkeit beim Senden einer großen Datenmenge im SocketChannel beeinflussen? Zum Beispiel beeinflusst die Byte-Zuweisung die Geschwindigkeit?Welche Faktoren beeinflussen die Geschwindigkeit beim Senden großer Datenmengen in SocketChannel?
Antwort
Die wichtigsten limitierenden Faktoren, um, sind:
- Netzwerkbandbreite, durch die ich die Bandbreite des langsamsten Teil des Weges zwischen den Peers bedeuten.
- Größe des Sockets Empfangspuffer am Empfänger. Wenn es weniger als das Bandbreite-Verzögerung-Produkt des Pfades ist, können Sie die volle verfügbare Bandbreite nicht verwenden.
- Die Geschwindigkeit, mit der Sie senden. Im Gegensatz zu einem Vorschlag in den Kommentaren sollten Sie so viel wie möglich zu einem Zeitpunkt senden und so schnell wie möglich wiederholen, Blocking-Modus vorausgesetzt. Im nicht blockierenden Modus ist es wesentlich komplexer, aber wenn die Bandbreitennutzung Ihr Ziel ist, sollten Sie besser den Blockiermodus verwenden. Sie sind wahrscheinlich auch besser dran mit
java.net
anstatt NIO auch.
Ich stimme zu, dass es keinen Vorteil für die kleinen Paketgrößen gibt, wenn Sie keinen Fortschritt anzeigen möchten. –
@WinterRoberts Warum hat Ihr Kommentar das Gegenteil gesagt oder zumindest impliziert? – EJP
Ich machte eine zufällige Annahme, dass der Fortschritt verfolgt werden müsste. –
Wenn Sie keine 100Gbps-Netzwerkverbindung haben, dann ist Bandbreite _will_ der begrenzende Faktor, es sei denn, Sie verwenden lächerlich kleine Paketgrößen, die zu großen Unkosten führen. –
@WinterRoberts Das wird nicht die geringste Verbesserung bringen, im Gegenteil; Nicht dass ich 256kb als 'kleines Paket' beschreiben würde. TCP wird das segmentieren und IP wird es in viel kleinere Stücke packen. – EJP
Diese 256kb ist, um den Fortschritt der Downloads von einem Dateiserver zu verfolgen. –