J'ai une application multi-thread qui utilise pthreads. J'ai un verrou mutex() et des variables de condition(). Il y a deux threads, un thread produisant des données pour le second thread, un worker, qui essaie de traiter les données produites en temps réel de telle sorte qu'un mandrin soit traité aussi près que possible d'une période de temps fixe. Cela fonctionne plutôt bien, cependant, lorsque le thread de production libère la condition sur laquelle le worker attend, un délai de presque une seconde est observé avant que le thread de travail ne prenne le contrôle et s'exécute à nouveau. Je sais cela parce que juste avant que le producteur ne libère la condition sur laquelle le travailleur attend, il fait un mandrin de traitement pour le travailleur s'il est temps de traiter un autre mandrin, puis immédiatement après avoir reçu la condition dans le thread de travail , il fait aussi un mandrin de traitement s'il est temps de traiter un autre mandrin.Comment puis-je améliorer mon comportement en temps réel dans une application multi-thread en utilisant des pthreads et des variables de condition?
Dans ce dernier cas, je constate que je suis en train de traiter plusieurs fois le mandrin. Je voudrais éliminer cette efficacité perdue et faire ce que je peux pour garder les mandrins aussi loin que possible de la fréquence désirée.
Y a-t-il quelque chose que je peux faire pour réduire le délai entre la condition de libération du producteur et la détection que cette condition est libérée de sorte que le travailleur reprenne le traitement? Par exemple, est-ce que cela aiderait le producteur à appeler quelque chose pour se forcer à changer de contexte? La ligne de fond est que le travailleur doit attendre chaque fois qu'il demande au producteur de créer du travail pour lui-même afin que le producteur puisse manipuler les structures de données du travailleur avant de dire au travailleur qu'il est prêt à fonctionner de nouveau en parallèle. Cette période d'accès exclusif par le producteur est censée être courte, mais pendant cette période, je vérifie également le travail en temps réel à effectuer par le producteur au nom du travailleur pendant que le producteur a un accès exclusif. D'une façon ou d'une autre, mon retour à la course en parallèle entraîne de temps en temps des retards importants que je voudrais éviter. Veuillez suggérer comment cela pourrait être mieux accompli.
Je ne comprends pas - et je ne pense pas qu'il y ait suffisamment de détails pour comprendre - pourquoi il y a deux threads. Si c'est une chose entrée-processus-sortie, peut-être que ce peut être un seul thread avec de grands tampons? – wallyk
Il existe deux threads pour une meilleure performance de débit. Un fil produit le travail. Les autres processus de threads qui fonctionnent. Avec un seul fil, la production du travail ne suit pas l'objectif en temps réel de la fréquence de traitement du travail. – WilliamKF