Pergunta de entrevista para Engenheiro de Software

Explique a diferença entre um processo e uma thread.

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Um processo é uma unidade isolada de execução com o próprio espaço de endereçamento virtual; uma thread é uma unidade de escalonamento dentro de um processo que compartilha esse espaço com as irmãs. Threads são baratas de criar e conseguem compartilhar dados diretamente, que é exatamente por que precisam de locks. Processos custam mais e precisam de comunicação entre processos explícita, mas uma queda ou bug de memória em um não corrompe outro.

Por que os entrevistadores perguntam isso

Essa é a base de toda conversa sobre concorrência, e os entrevistadores usam para ver o quão fundo vai o modelo mental. Eles querem o ponto do isolamento de memória, a diferença de custo, e a consequência: memória compartilhada significa estado mutável compartilhado, que significa sincronização. Pontos extras se você conectar com como o seu runtime realmente escalona trabalho, já que isso decide se threads te ajudam em algo.

Como estruturar sua resposta

  • Ancore no espaço de endereçamento: isolado versus compartilhado.
  • Compare custo de criação e custo de troca de contexto.
  • Tire a consequência para sincronização e isolamento de falhas.
  • Amarre a como o runtime da sua linguagem escalona trabalho.

Exemplo de resposta

Exemplo falado, em primeira pessoa

A diferença que importa é memória. Cada processo ganha o próprio espaço de endereçamento, então um caindo ou rabiscando um ponteiro não derruba os outros, mas eles só conversam por pipes, sockets ou um segmento de memória compartilhada que você montou de propósito. Threads vivem dentro de um processo e compartilham o heap, então passar dados entre elas é só um ponteiro, o que é rápido e também exatamente por que você precisa de locks. O custo de criação segue a mesma linha: criar uma thread é barato, fazer fork de um processo não. Na prática eu deixo o runtime decidir minha estratégia. Em Python, trabalho CPU bound vai para múltiplos processos, porque o global interpreter lock impede threads de executarem bytecode em paralelo, enquanto trabalho de IO fica bem em threads ou async. Em Go ou Java eu recorreria a threads ou goroutines primeiro. Inverter isso é como você acaba com oito worker threads todas enfileiradas atrás de um interpretador e sem ideia de por que a máquina está ociosa.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • O que realmente acontece durante uma troca de contexto?
  • Quando você escolheria IO async em vez de threads por completo?
  • Como um thread pool evita o custo que você descreveu?

Mais perguntas para Engenheiro de Software

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot