Bonjour,
Dans un but d'optimisation j'ai besoin de savoir quel est la fonction qui met le moins de temps à s’exécuter : read / recv / recvfrom
Je ne peux malheureusement pas effectuer des testes maintenant.
D'avance merci.
Bonjour,
Dans un but d'optimisation j'ai besoin de savoir quel est la fonction qui met le moins de temps à s’exécuter : read / recv / recvfrom
Je ne peux malheureusement pas effectuer des testes maintenant.
D'avance merci.
Bonjour,
Personne ne peut répondre à cette question de façon déterministe. Ça va dépendre du système d'exploitation que tu utilises — et de sa version exacte — mais surtout, ces trois fonctions vont passer l'essentiel de leur temps à attendre que la source de donnée leur envoie ce qu'il y a à lire. Si c'est sur le système de fichiers, ça va dépendre du hardware. Si c'est par le réseau, alors l'essentiel des causes de latence vont être extérieures à ta machine : si le réseau n'envoie rien, un recv peut rester bloqué plusieurs dizaines de secondes le temps que quelque chose lui parvienne.
Merci de ta réponse Obsidian,
Pour être plus précis : Je travaille sur la réception de packet UDP / Une première version avait été développée en JAVA sauf que sur les 141 packet émit le programme n'en recevait que 20-30, avec ma solution en C j'en reçois entre 135 et 141, j'utilise la fonction recvfrom.
Pensez-vous qu'avec un read ou recv je peux atteindre les 141/141 à chaque fois ? car dans cette problématique c'est clairement la fonction recvfrom qui est trop lente
Juste pour info recv ne marche qu'avec un socket connecté (tcp) donc tu peux déjà la virer de ton comparatif.
Je ne pense pas que tu puisses avoir 141/141 du à la nature d'udp qui ne vérifie pas si le packet à été reçu. Essaies d'envoyer le nombre de paquets à recevoir au début ou fait un check à chaque paquet mais là tu réécris tcp en quelque sorte (tu es obligé d'utilisé UDP et de recevoir tous tes paquets ?).
Partager