Un processus est une unité d'exécution isolée avec son propre espace d'adressage virtuel ; un thread est une unité d'ordonnancement à l'intérieur d'un processus qui partage cet espace d'adressage avec ses frères. Les threads sont peu coûteux à créer et peuvent partager des données directement, ce qui est exactement pourquoi ils ont besoin de verrous. Les processus coûtent plus cher et exigent une communication interprocessus explicite, mais un crash ou un bug mémoire dans l'un ne peut pas corrompre un autre.
Pourquoi les recruteurs posent cette question
C'est la base de toute conversation sur la concurrence, et le recruteur s'en sert pour voir la profondeur du modèle mental. Il veut le point sur l'isolation mémoire, la différence de coût, et la conséquence : mémoire partagée veut dire état mutable partagé veut dire synchronisation. Point bonus si vous le reliez à la façon dont votre runtime ordonnance réellement le travail, puisque c'est ça qui décide si les threads vous aident vraiment.
Comment structurer votre réponse
- Ancrez sur l'espace d'adressage : isolé contre partagé.
- Comparez le coût de création et le coût de changement de contexte.
- Tirez la conséquence pour la synchronisation et l'isolation des crashs.
- Reliez ça à la façon dont le runtime de votre langage ordonnance le travail.
Exemple de réponse
La différence qui compte, c'est la mémoire. Chaque processus a son propre espace d'adressage, donc l'un qui plante ou qui écrit n'importe où via un pointeur ne peut pas emporter les autres, mais ils ne peuvent communiquer que par des tubes, des sockets ou un segment de mémoire partagée mis en place délibérément. Les threads vivent dans un seul processus et partagent le tas, donc passer des données entre eux n'est qu'un pointeur, ce qui est rapide et aussi exactement pourquoi il vous faut des verrous. Le coût de création suit la même ligne : lancer un thread est peu coûteux, faire un fork d'un processus non. En pratique, je laisse le runtime décider de ma stratégie. En Python, le travail limité par le CPU part sur plusieurs processus, parce que le global interpreter lock empêche les threads d'exécuter du bytecode en parallèle, tandis que le travail limité par les entrées-sorties va très bien sur des threads ou en async. En Go ou en Java, j'irais d'abord vers les threads ou les goroutines. Faire l'inverse, c'est comme ça qu'on finit avec huit threads de travail tous en file derrière un seul interpréteur sans comprendre pourquoi la machine est au repos.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Que se passe-t-il réellement pendant un changement de contexte ?
- Quand choisiriez-vous des entrées-sorties asynchrones plutôt que des threads ?
- Comment un pool de threads évite-t-il le coût que vous avez décrit ?
Autres questions pour Ingénieur logiciel
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions