Un fil est un peu comme un procédé léger. Il s'agit d'un chemin d'exécution indépendant au sein d'une application. Le thread s'exécute dans le même espace mémoire que l'application et a donc accès à toutes les mêmes ressources, objets globaux et variables globales.
Ce qui est bien avec eux, c'est que vous pouvez paralléliser un programme pour améliorer les performances. Quelques exemples : 1) Dans un programme d'édition d'images, un thread peut exécuter le traitement des filtres indépendamment de l'interface graphique. 2) Certains algorithmes se prêtent à plusieurs threads.
Qu'est-ce qu'ils ont de mauvais ? Si un programme est mal conçu, ils peuvent conduire à des problèmes de blocage où les deux threads attendent l'un de l'autre pour accéder à la même ressource. Et deuxièmement, la conception du programme peut devenir plus complexe à cause de cela. De plus, certaines bibliothèques de classes ne prennent pas en charge le threading. Par exemple, la fonction "strtok" de la bibliothèque C n'est pas "thread safe". En d'autres termes, si deux threads l'utilisaient en même temps, ils détruiraient les résultats de l'autre. Heureusement, il existe souvent des alternatives thread safe... par exemple, la bibliothèque boost.
Les fils ne sont pas mauvais, ils peuvent même être très utiles.
Sous Linux/Unix, le threading n'a pas été bien supporté dans le passé, bien que je crois que Linux a maintenant le support Posix thread et d'autres unités supportent le threading maintenant via des bibliothèques ou nativement. i.e. pthreads.
L'alternative la plus courante au threading sous les plateformes Linux/Unix est le fork. Le fork est simplement une copie d'un programme, y compris les handles de fichiers ouverts et les variables globales. fork() retourne 0 au processus enfant et l'identifiant du processus au parent. C'est une ancienne façon de faire les choses sous Linux/Unix mais elle est toujours bien utilisée. Les threads utilisent moins de mémoire que fork et sont plus rapides à démarrer. De plus, les communications entre processus demandent plus de travail que les simples threads.