2016-10-12 3 views
2

J'ai utilisé TCP AsyncSocket pour transférer un fichier volumineux d'une machine à une autre en utilisant une connexion locale (en utilisant l'hôte comme adresse IP locale). D'abord, j'ai fait la configuration pour la connexion de socket TCP unique et le taux de transfert de données de feutre est lent. C'est environ 1mb/sec.Transfert de données plus lent avec des connexions TCP parallèles

Pour le rendre plus rapide, j'ai créé 10 sockets TCP (Connexion sur des ports séparés sur des threads séparés) et a commencé à lire les partitions du fichier simultanément. Mais cela n'a fait aucune différence. Le taux de transfert est presque le même que celui de la connexion à un seul socket TCP (ou même plus lent).

Une idée? Pourquoi plusieurs sockets TCP ne transfèrent pas de données en parallèle? Des moyens ou des suggestions pour transférer le fichier rapidement sur TCP?

Répondre

4

La mise en parallèle d'une opération d'E/S n'aide que si le canal d'E/S n'est pas saturé et que la tâche est liée par un seul cœur. Il est très probable que l'ajout de canaux d'E/S supplémentaires ralentira les choses puisque vous avez maintenant plusieurs clients en concurrence pour une ressource rare.

Ce que vous devez savoir est où est votre goulot d'étranglement? Une fois que vous avez quantifié le réel cause de votre problème de performance, vous serez en mesure de le réparer.

+0

Merci. J'ai essayé avec FTP, Netcat etc. Et j'ai reçu la vitesse de transfert de données presque semblable. D'autres facteurs tels que les routeurs et le nombre de clients actifs font également une légère différence. Donc, c'est bien. – user2999133