Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

thread et fork sous linux

3 réponses
Avatar
Eric Bart
Bonjour,

Je suis un peu perdu en traitement asynchrone ...

Il parait que fork est aussi rapide que spawn sous linux ...
je ne comprends pas tellement puisque fork est censé recopier
tout l'environnement data du processus parent. En plus
je ne trouve pas la commande spawn !

Je veux bien utiliser fork. Mais quand le processus fils termine
je le tue avec un exit(0) et cet exit(0) déclenche les destructeurs
de mes classes qui détruisent par un socket des objets qu'il ne
faut pas détruire ...

Il me semble que je serais plus à l'aise en lancant un thread. Non ?
Comment lance t-on un thread sous linux ?

Merci.

3 réponses

Avatar
Nicolas George
"Eric Bart" wrote in message <410fc350$0$24058$:
Il parait que fork est aussi rapide que spawn sous linux ...
je ne comprends pas tellement puisque fork est censé recopier
tout l'environnement data du processus parent.


La plupart des OS modernes utilisent le copy-on-write pour ça : les
plages mémoires à copier sont marquées dans la MMU comme read-only,
partagées entre les deux process, et à la première tentative de
modification, le noyau profite de la faute de page pour faire la copie.
Seules les pages réellement modifiées sont ainsi copiées, et uniquement
au moment où elles le sont.

En plus
je ne trouve pas la commande spawn !


C'est normal, ça n'existe pas. La dernière fois que j'ai entendu parler
de spawn, c'était sous DOS, où ça correspondait à un fork+exec+wait
(évidemment, sous un (ahem) OS monotâche, pas de fork sans wait...), si
je me souviens bien.

Je veux bien utiliser fork. Mais quand le processus fils termine
je le tue avec un exit(0) et cet exit(0) déclenche les destructeurs
de mes classes qui détruisent par un socket des objets qu'il ne
faut pas détruire ...


La commande _exit sert à ça, mais je trouve ça assez moche. En général,
j'aurais tendance à dire que si l'objet ne peut pas être détruit sans
qu'il endommage une resource potentiellement partagée, c'est que son API
est mal conçue.

Il me semble que je serais plus à l'aise en lancant un thread. Non ?


Ça dépend énormément du contexte.

Comment lance t-on un thread sous linux ?


Comme partout, pthread_create.

Avatar
Eric Bart
Oui Merci

Finalement le fork me parait très bien et _exit marche bien !
Avatar
Pierre Thorel

Oui Merci

Finalement le fork me parait très bien et _exit marche bien !


Les threads, c'est quand même plus propre et plus léger (l'espace
d'adressage mémoire est partagé, ce qui signifie que tous les threads d'un
même processus travaillent sur une même copie des données).

L'inconvénient, c'est qu'il faut faire attention à ce que les différents
threads n'entrent pas en concurrence lorsqu'ils accèdent aux données en
mémoire.


Pour l'utilisation, ce n'est pas très dur. Un bon coup de man
pthread_create permet de s'en convaincre !
Pour règler les problèmes de concurrence, regarder les fonctions
pthread_mutex_{init,lock,unlock}.


Cordialement, Pierre Thorel