2009-07-27 22 views
0

J'ai une application preuve de concept rapide et sale que j'ai écrit en C# qui lit les paquets UDP de multidiffusion de débit de données élevé du réseau. Pour diverses raisons, l'implémentation complète sera écrite en C++ et j'envisage d'utiliser boost asio. La version C# utilisait un thread pour recevoir les données en utilisant des lectures bloquantes. J'ai eu quelques problèmes avec les paquets abandonnés si l'ordinateur était lourdement chargé (généralement avec le traitement de ces paquets dans un autre thread). Ce que je voudrais savoir, c'est si les opérations async read en mode boost (qui utilisent des io chevauchés dans Windows) aideront à recevoir les paquets et/ou réduiront le temps de CPU nécessaire pour recevoir les paquets. Le thread unique faisant des lectures bloquantes est assez simple, l'utilisation des lectures asynchrones semble être un peu plus complexe, mais je pense que cela en vaudrait la peine si cela offrait des performances plus élevées ou moins de paquets sur un système lourdement chargé. Actuellement, le débit de données ne doit pas dépasser 60 Mb/s.Boost asio async vs blocage des lectures, udp vitesse/qualité

Répondre

0

J'ai écrit un code de gestion de multidiffusion en utilisant également boost::asio. Je dirais que dans l'ensemble, selon mon expérience, il y a beaucoup de complexité à faire des choses dans asio qui peut ne pas aider les autres personnes avec lesquelles vous travaillez à comprendre le code que vous finissez par écrire. Cela dit, probablement l'argument en faveur de passer à asio au lieu d'utiliser beaucoup de threads différents pour faire le travail est que vous auriez à faire moins de changement de contexte. Ce serait clairement vrai sur une boîte simple, mais qu'en est-il quand vous allez multi-core? Avez-vous l'intention de décharger le travail que vous recevez sur les threads ou simplement d'avoir un seul thread en charge du traitement? Si vous optez pour une approche à un seul thread, vous allez vous retrouver dans une situation où vous pourriez laisser tomber des paquets attendant ce thread pour traiter le travail.

En fin de compte ce sont des balançoires et des ronds-points. Je dirais que vous voulez obtenir des chiffres assez solides qui étayent vos arguments pour suivre cette voie si vous le faites, simplement à cause de la complexité supplémentaire que cela implique (un tout nouveau paradigme pour certaines personnes, j'en suis sûr).

+0

c'est une réponse horrible ... – snb