Optimisation Thread et Sockets
Bonsoir a tous,
J'utilise un thread pour recevoir des messages UDP que je stocke dans une liste chainée. Tout se passe bien. Voici le code :
PS : Les threads utilisés sont les threads windows (CreateThread...)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
struct timeval tv;
tv.tv_sec = 0; //timeout in seconds
tv.tv_usec = 100; //timeout in micorseconds
Message_Struct * myMessage = (Message_Struct*)malloc(sizeof(Message_Struct));
while ( stopRequired == 0 ) {
FD_ZERO(&readfs);
FD_SET(mySocket, &readfs);
if(select(mySocket + 1,&readfs,NULL,NULL,&tv)){
// Error check
}
// Check if there is available data
if(FD_ISSET(mySocket,&readfs)){ // Utilisation des descripteur non nécessaire puisque thread uniquement pour la récetpion
// Copy them
byteLength = recvfrom(mySocket, (char*)myMessage, sizeof(Message_Struct),0,(SOCKADDR*)&fromAddress,&fromAddressLength);
if(byteLength > 0){
// Get the linked list node where to store it
msg = getMessageStorage(myMessage->Signature);
if(msg != 0){
memcpy(msg,myMessage,sizeof(Message_Struct));
}
}
}
} |
J'ai 2-3 questions :
- pourriez vous me confirmer que l'utilisation de descripteur ici ne sert a rien, puisque le thread est uniquement créé pour récupérer les messages recu, et les stocker dans une liste chainée ? Qu'en est il de la charge du processeur ? J'ai besoin que ce thread soit aussi léger que possible.
- Je voudrais remplacer memcpy par un echange de pointeur pour gagner en vitesse. En échangeant le pointeur du message recu myMessage dans le recvfrom avec celui de la liste chaînée. Du genre, remplacer le memcpy par :
Code:
1 2 3 4 5 6 7
|
LinkedListNode* tmpNode = getListNode(myMessage->Signature);
if(tmpNode != NULL){
Message_Struct * tmpMsg = tmpNode->Message;
tmpNode->Message = consumedExchange;
myMessage = tmpMsg;
} |
-Cela presenterai t-il réellement un gain de vitesse ? (Je pense que oui, l'interversion de pointeur me semblant plus rapide que le memcpy)
-Cela peut il présenter d'autres dangers ? Le message recu n'est accédé qu'en lecture...
Merci