Je sens actuellement que je sur-utilise le multi-threading.
J'ai 3 types de données, A, B et C.
Chacun A
peut être converti en plusieurs B
s et chacun B
peut être converti en plusieurs C
s.
Je veux seulement traiter l' C
art.
Je pourrais écrire cela assez facilement avec quelques fonctions de conversion. Mais je me suis surpris à l'implémenter avec des threads, trois files d'attente ( queue_a
, queue_b
et queue_c
). Il existe deux threads effectuant les différentes conversions, et un travailleur:
ConverterA
litqueue_a
et écrit dansqueue_b
ConverterB
litqueue_b
et écrit dansqueue_c
Worker
gère chaque élément dequeue_c
Les conversions sont assez banales, et je ne sais pas si ce modèle est trop alambiqué. Mais cela me semble extrêmement robuste. Chaque "convertisseur" peut commencer à fonctionner avant même que les données soient arrivées dans les files d'attente, et à tout moment dans le code, je peux simplement "soumettre" de nouveaux A
s ou B
s et cela déclenchera le pipeline de conversion qui déclenchera à son tour un travail par le travailleur fil.
Même le code résultant semble plus simple. Mais je ne sais toujours pas si j'abuse des discussions pour quelque chose de simple.
la source
Réponses:
Il est presque toujours plus simple de penser de manière séquentielle, puis de modifier ultérieurement cette logique pour mieux fonctionner à l'aide de threads. Et, comme le dit l'expression, "Si ce n'est pas cassé, ne le répare pas." La plupart des programmeurs n'utilisent pas de threads simplement parce qu'il n'est pas nécessaire de les utiliser.
Si vous vous sentez plus à l'aise de les utiliser, plus de puissance pour vous. Cependant, sachez que si les threads n'offrent pas une augmentation de vitesse en éliminant les goulots d'étranglement, ils ralentissent presque certainement votre programme.
Considérez également que les systèmes qui dédient un seul processeur à un processus simuleront plusieurs threads par un seul thread afin d'économiser des ressources (cela ne se produit pas souvent avec les ordinateurs modernes, bien que les applications de téléphones intelligents soient encore très soumises à cet abus). Dans ce cas, même si vous éliminez les goulots d'étranglement grâce à l'utilisation de threads, cela sera en fait plus lent que si vous ne l'utilisiez pas du tout.
Et, peut-être la raison la plus subtile de faire preuve de prudence pour utiliser des threads, mais certainement pas la moins importante, les threads ont tendance à faire ce que vous ne vous attendez pas. Oui, si vous prenez des précautions, ça devrait aller. Oui, si vos threads n'écrivent pas dans des variables partagées entre les threads, vous devriez être d'accord. Cela dit, les bogues liés aux threads sont très difficiles à trouver. Étant donné que je suis d'avis qu'un programmeur ne peut jamais éliminer complètement la possibilité de créer des bogues dans le code et donc un programmeur devrait prendre des mesures pour se protéger contre d'éventuels bogues plutôt que de se concentrer sur leur élimination complète, vous devriez certainement appliquer cette idée aux hard- pour trouver également des bogues de threads. En d'autres termes, sachez que malgré tous vos efforts,
Alors, devriez-vous quand même utiliser des threads? Eh bien, une bonne connaissance des threads n'est certainement pas une mauvaise chose, surtout si vous devenez bon dans ce domaine. Cependant, le mouvement récent s'est orienté vers des langages à un seul thread tels que node.js. L'un des principaux avantages d'avoir un seul thread est qu'il est facile à mettre à l'échelle et certaines optimisations peuvent être faites si vous savez que les instructions doivent être exécutées séquentiellement (même si les optimisations peuvent signifier que les instructions qui peuvent être exécutées en parallèle peuvent être exécuté de manière asynchrone).
Cela dit, je dis de faire ce qui vous convient le mieux. D'après mon expérience, l'écriture d'un programme que vous comprenez est plus prioritaire que son accélération. Assurez-vous simplement d'utiliser des threads lorsque vous pensez que cela vous aide à écrire le programme, et non pas parce que vous voulez qu'il fonctionne plus rapidement, car vous ne devriez pas vous soucier autant des performances que vous écrivez le programme (l'optimisation est importante, mais elle peut également attendre).
la source