Différence entre pthread et la fourche sur gnu/Linux
Quelle est la différence fondamentale entre un pthread et la fourche w.r.t. linux en termes de
la mise en œuvre des différences et comment la programmation varie (varie-t-elle ?)
J'ai couru strace sur deux programmes similaires , l'un utilisant les pthreads et l'autre à l'aide de la fourche,
les deux à la fin faire un clone() syscall avec des arguments différents, donc je suppose
les deux sont essentiellement la même chose sur un système linux, mais avec les pthreads être plus facile
à traiter dans le code.
Quelqu'un peut-il donner une explication profonde?
EDIT : voir aussi liées question
- J'ai énuméré quelques différences ici: stackoverflow.com/questions/3609469/...
Vous devez vous connecter pour publier un commentaire.
En C il y a quelques différences cependant:
fork()
But est de créer un nouveau processus, qui devient le processus de l'enfant de l'appelant
Les deux processus vont exécuter la prochaine instruction suivant l'appel système fork ()
Deux copies identiques de l'ordinateur de l'espace d'adresse,le code, et la pile sont créés l'un pour le parent et l'enfant.
La pensée de la fourche que c'était une personne; Bifurquer provoque un clone de votre programme (processus), qui exécute le code copié.
pthread_create()
But est de créer un nouveau thread dans le programme qui est donné le même processus de l'appelant
Les Threads du même processus peuvent communiquer en utilisant la mémoire partagée. (Attention!)
Le deuxième thread va partager les données,les fichiers ouverts, les gestionnaires de signaux et le signal de cessions, le répertoire de travail actuel de l'utilisateur et ID de groupe du. Le nouveau thread aura son propre pile, l'ID de thread, et enregistre bien.
Poursuivre l'analogie; votre programme (processus) pousse un second bras lorsqu'il crée un nouveau fil, connecté à la même cerveau.
fork
va vivre sa propre vie.Vous devriez regarder la
clone
page de manuel.En particulier, il répertorie tous les possible de cloner les modes et comment ils affectent les processus/thread, espace de mémoire virtuelle etc...
Vous dire "fils plus facile à traiter dans le code": c'est très discutable. Bug d'écriture libre, impasse-gratuit multi-thread code peut être tout un défi. Parfois le fait d'avoir deux processus distincts rend les choses beaucoup plus simple.
fork
est mis en œuvre par leclone
syscall btw.)Sur Linux, le système d'appel
clone
clones d'une tâche, avec une configurables niveau de partage.fork()
appelsclone(least sharing)
etpthread_create()
appelsclone(most sharing)
.bifurquer coûte un tout petit peu plus de pthread_createing en raison de la copie de tables et création de VACHE mappages pour la mémoire.