Como você explicaria o multi threading para uma criança de sete anos?


21

Se você tem que explicar o conceito de multi-threading para uma criança de sete anos, como você faria isso? Recentemente, recebi essa pergunta em uma entrevista. Eu inventei uma história usando trabalhos (a tarefa a ser realizada) e trabalhadores (os tópicos), mas não foi totalmente convincente (considerando que o garoto é muito jovem).

Se lhe pedissem para descrever isso, como você faria isso?


55
Eu perguntaria ao entrevistador se ele / ela estava planejando contratar crianças de 7 anos de idade.
Craige 03/03

14
Eu teria dado um soco na cara do entrevistador.
21911 idiotas

11
Provavelmente é para testar se você conhece o assunto suficientemente bem para ensiná-lo a alguém que não tem absolutamente nenhum conhecimento do assunto.
FrustratedWithFormsDesigner

6
@ Morons Primeiro de tudo, isso é um pouco violento. Em segundo lugar, suas palavras estão em maiúsculas por causa de algum significado especial?
Nicole

11
@FrustratedWithFormsDesigner Bem, é estúpido. Você pode explicar números complexos para alguém que não sabe contar? Não? Você é lixo em números complexos então.
precisa saber é

Respostas:


35

Descreva o que é, deixe de fora os termos técnicos, exceto as definições:

  1. Você tem cinco trabalhos a fazer. Você precisa começar a trabalhar em todos eles agora.
  2. Cada trabalho é um encadeamento.
  3. Você é o processador.
  4. Gaste um pouco de tempo trabalhando em cada trabalho e depois passe para o próximo, certificando-se de dar atenção a todos eles.
  5. Se você tiver mais pessoas, um trabalho só poderá ser realizado por uma pessoa de cada vez.
  6. Como cada pessoa pode trabalhar em um trabalho diferente, mais pessoas podem realizar todo o trabalho mais rapidamente, se você tiver mais de um emprego.

15
Eu acho que a única coisa que eu acrescentaria talvez seja mudar "empregos" para "jogos" ou brincar com brinquedos ou fazer tarefas ou dever de casa.
precisa saber é o seguinte

Então, se você tem 'o processador' 'notas Keep' quando eles estão trabalhando em um emprego, você pode explicar cache e coerência de cache em um env processador múltipla
Steven Evers

Boa descrição, mas conhecendo as crianças de 7 anos, isso não vai voar.
Vermelho-sujidade

@el fusor Eu sou a 7 anos de idade! ou pelo menos eu ac lke 1 hahahahahaha
Mateen Ulhaq 4/11

@bethlakshmi, você supõe que no máximo 7 crianças ainda estão jogando e ainda não saíram e conseguiram empregos produtivos? vamos!
Tipo anônimo

22

Ei, garoto. Você já andou e mascou chiclete ao mesmo tempo enquanto pensava em Pokemon? Esse é o seu cérebro multithreading.


1
São os periféricos do seu cérebro capazes de agir de forma relativamente independente. É (quase) como o seu cérebro usando DMA.
Nick T

@ Nick T, mais parecido com a computação em nuvem, sem apenas acesso ao código fonte para os componentes. Mesmo a pessoa que mastiga o chiclete não tem idéia de como está realmente realizando a ação.
Tipo anônimo

@ Não, sua última declaração parece reforçar minha analogia periférica. O periférico faz coisas sem a CPU investigar as minúcias, simplesmente delegando-o. Acho que você também pode dizer que é como computação em nuvem, mas em uma escala muito maior; DMA e periféricos são de nível bastante baixo.
Nick T

mesmo? Eu pensaria que jogar pokemon (resolução de problemas de ordem superior) exigiria definitivamente a memória do modo de usuário e o uso de uma linguagem de programação de nível superior, mas talvez algo como mastigar poderia ser DMA.
Tipo anônimo

10

Relacione-o a algo que eles possam entender facilmente. Carros em uma estrada.

Pense em uma estrada de pista única. Com 12 carros, eles dirigem um após o outro. E apenas um carro pode terminar ao mesmo tempo, e um carro mais rápido, não pode passar pelos mais lentos.

Mas, com multi-threading, é como se todos esses carros estivessem dirigindo em uma estrada larga com quatro faixas. Os carros mais rápidos podem ultrapassar os mais lentos.

Edit: e, se não tiverem cuidado, podem colidir um com o outro ...


4
Se multi-threading é uma estrada, então é aquele em que, quando um carro está dirigindo, o outro não está se movendo em tudo - não seguir atrás dela ...
Nicole

@Renesis, bom ponto, acho que eu poderia mudar o exemplo para uma ponte estreita que apenas um carro pode atravessar em um momento porque dois carros seriam dois pesados ...
CaffGeek

10

Eu explicaria isso como lavar a roupa.

Você tem 3 cargas de roupa e uma lavadora e uma secadora.

A maneira como todo mundo lava a roupa é mover a primeira carga para a secadora e depois colocar a próxima carga para lavar.

Qualquer criança entenderia que esperar a primeira carga secar antes de começar a lavar a segunda carga levaria mais tempo.

Você pode dar um passo adiante, explicando que, se houver mais lavadoras e secadoras (como em uma lavanderia), é possível fazer as cargas mais rapidamente.


2
Além disso, você não pode secar a roupa até que uma carga passou pela máquina de lavar, então você também pode descrever o bloqueio
zzzzBov

Eu quase te dei um +1, mas então percebi que nenhuma criança em sã consciência seguiria essa explicação. Para iniciantes, você usava algo extremamente chato (do ponto de vista infantil, não meu), o que é uma tarefa árdua. Assim que você disser a palavra lavanderia, sua mente será desligada, eles literalmente ouvirão apenas as 7 primeiras palavras.
Tipo anônimo

6

Cozinhar uma refeição com vários pratos em um pequeno fogão. Você tem dois queimadores (processadores ou núcleos) e quatro pratos (fios) para cozinhar. Portanto, apenas um máximo de dois pratos pode ser cozido (executado) por vez. Pratos diferentes têm diferentes tempos de cozimento. O cozinheiro (o SO) precisa fazer malabarismos com tudo isso para que tudo seja preparado a tempo do jantar.


3

Um malabarista de circo começando com duas bolas e gradualmente adicionando mais e mais bolas ao seu ato.


Esta é a melhor resposta, pois responde à pergunta da perspectiva de uma criança de 7 anos, não de um programador de 30 anos.
Tipo anônimo

2

Na minha experiência, as crianças de 7 anos não têm problemas com o conceito de coisas diferentes acontecendo ao mesmo tempo, o que é testemunhado pelos vários kits de ferramentas de programação projetados para crianças. Notavelmente os kits Lego, mas também o sistema Scratch.

Talvez o entrevistador estivesse simplesmente tentando encontrar um novo ângulo para perguntar algo inesperado.


2

"Preciso que você carregue dois copos da cozinha para a mesa . (Eles correm, carregando um copo em cada mão.) Agora, faça-o novamente, mas use apenas uma mão."


2

Algumas dessas respostas são alucinantes ... Acho que posso ser a única aqui que conhece crianças de 7 anos ???

Então, Johnny ... Multi-threading é semelhante ao que acontece quando é o tempo de limpeza na escola. Toda a sua turma precisa se limpar após o final do dia ... Cada criança é basicamente um tópico ... pegar brinquedos é a tarefa e a caixa de brinquedos é um recurso compartilhado.

No geral, acho que dar um soco na cara do entrevistador é uma resposta melhor.


quem marcou esse -1 está brincando. seriamente crescer um senso de humor. É uma pergunta ridícula que deve ser tratada dessa maneira.
Tipo anônimo

Esta é provavelmente uma das melhores respostas ouvidas até agora. Ele pega o conceito e o coloca em termos que o ouvinte entende - mesmo que o ouvinte não tenha idéia de como codificar um aplicativo multithread, ele agora entenderá a idéia básica.
FrustratedWithFormsDesigner

2

Multi-thread, é como ter muitas coisas para fazer ao mesmo tempo e fazê-las aos poucos.

Ei, o jovem curioso, todos os dias você deve comer, brincar e dormir; direita? Mas por que você não come uma vez ... toma muito até não aguentar mais, depois dorme o tempo que precisar, depois joga e joga jogos interessantes?

Bem, você não pode fazer isso, porque se você não comer, ficará com fome, não importa o quanto conseguiu na refeição anterior. Se você não dormir, ficará cansado e não poderá brincar com seus amigos. Entendido? Há várias coisas que precisam ser feitas, mas não podemos fazê-las de uma só vez. Tomamos café da manhã, jogamos, almoçamos, jogamos novamente, ... e finalmente diz "boa noite".

É assim também que um computador funciona: eles tocam um pouco a música, depois mudam para a imagem que você está desenhando, depois mudam novamente para tocar música. Mas o tempo que levou para fazer todas essas coisas mil vezes é apenas um piscar de olhos, então você não pode vê-lo.


1

Você tem um conjunto de 6 tarefas que precisa executar:

  • faça sua lição de casa
  • limpe seu quarto
  • Fazer as compras
  • pegue as maçãs no jardim
  • lave os pratos
  • varrer a varanda

Cada tarefa leva 1 hora para ser realizada. Você tem 2 irmãos.

  • Se você não usa multitarefa, significa que você deve fazer todo o trabalho sozinho. Você levará 6 horas (se você começar às 12:00, todas as tarefas serão concluídas às 18:00).
  • Se você usa multitarefa, significa que pode dar algumas tarefas aos seus irmãos. Se todos começarem a trabalhar ao mesmo tempo, concluirão todas as tarefas mais cedo. Nesse caso, todos os três farão 2 tarefas cada, o que levará 2 horas (se todos começarem às 12:00, todas as tarefas serão concluídas às 14:00!).

0

Você tem um controlador de joystick / jogo.

Existem 4 filhos. Cada criança joga cada nível enquanto os outros descansam. Usando o trabalho em equipe, eles finalmente atingem o nível 255 *.

Enquanto cada criança está jogando, ele também está comendo do saco de batatas fritas do qual somente o jogador atual pode comer.

* Então o jogo trava. ;)


"Por que você não compra mais 3 controladores?"

Bem, esses são vários processadores!


0

Classe de arte (aplicação multithread)

Como não pode haver aula sem professor, você precisa de um professor (thread principal). Quando você chega à aula, senta-se e o professor é responsável por todos e designa a turma para pintar quadros para o dia.

O professor designa todos os alunos do dia para começar a pintar (inicialização e atribuição de linhas).

Como a escola tem apenas tantas tintas, todos terão que compartilhar cores entre si (tintas representam memória).

Digamos que você esteja pintando um dragão e queira dar olhos vermelhos loucos, mas outra pessoa está usando a tinta vermelha. Você não pode simplesmente passar a tinta para si, porque ninguém mais poderia usá-la. Em vez disso, o que você faz é pedir educadamente para compartilhar (bloqueio de recursos) a tinta. Você usa um pouco e depois passa adiante. Você pode ter que esperar um pouco para recuperá-lo, mas isso permite a todos que precisam dele um pouco sem lutar com pintura (condições da corrida).

No final da aula, o professor dispensa a aula (junção de linha).


Jogos (aplicação multiprocessos)

Jogando um jogo de cartas com amigos (ou jogo equivalente com itens colecionáveis):

Digamos que você se reúna com seus amigos (processos) depois da escola. Não há professores por perto, ninguém está lá para lhe dizer o que fazer.

Todos se reúnem para jogar (aplicativo com vários processos ou com várias camadas).

Você pensa muito sobre como pode usar seus cartões para derrotar seus oponentes (processamento interno) e tenta compartilhar idéias com seu parceiro quando tiver uma ideia (passagem de mensagens).

Se você for realmente bom, poderá ingressar em um clube:

Líder (programa executivo) Membros (subprogramas)

Se o clube ficar realmente bom, eles podem criar uma maneira especial (API) de se comunicar para ajudar a criar melhores estratégias.


Eu escolhi não mencionar vários processadores / núcleos aqui porque a abstração fica bastante complicada (e a alternância de contexto ainda é transparente para a maioria dos aplicativos). Provavelmente, eu poderia começar dizendo que cada equipe do jogo representa um processador / núcleo separado e a maioria dos jogos ainda é ruim porque eles permitem apenas que algumas equipes joguem juntas em um jogo. O futuro pode parecer algo mais como um MMORPG, onde muitas pessoas podem jogar juntas em um jogo em muitas equipes diferentes.

Tentar desenvolver uma metáfora infantil para um sistema de processamento distributivo em um computador com muitos núcleos ou em uma rede host seria bastante interessante, mas não foi isso que o Op pediu.


Nota:

A passagem de mensagens acima é uma referência às muitas formas de comunicação que os programas usam para conversar entre si. Como as pessoas, os aplicativos têm muitas maneiras de se comunicar. Escrever é como canalizar dados serializados, falar é como rede, sussurrar é como rede através de uma conexão criptografada, bancos de dados são como um cartão de pontuação (estrutura finita com dados bem definidos), e usar o MSMQ é como tocar no código morse, batendo sua cabeça contra um superfície sólida.

A maioria das outras formas de comunicação além dessas se confundem demais para eu considerá-las indistinguíveis.

A parte, de lado:

Se você já jogou um jogo online como o Halo, as pessoas que se juntam a grupos (ou se tornam jogadores profissionais) geralmente têm um idioma abreviado para fazer chamadas para direcionar umas às outras onde os jogadores da outra equipe estão e o que estão usando. É realmente desagradável se você não conhece as chamadas, mas é surpreendentemente eficaz durante o jogo.

É interessante como, embora a maioria das pessoas que vive em uma determinada cultura fale um idioma comum, mas nessa cultura as pessoas desenvolvam idiomas de domínio sucintos mais curtos, otimizados para lidar com tarefas específicas. Na computação, eu compararia isso a uma API.


-1

Use um modelo amplamente adotado: os filósofos do jantar.

5 Filósofos comendo seu jantar de macarrão.

5 garfos disponíveis ao redor da mesa.

Cada filósofo precisa de dois garfos para comer.

Alguns comem. Alguns filosofam enquanto esperam.


2
Filósofos comem com dois garfos? Cara, eles são ainda mais estranhos do que eu pensava! : P Esta história faz mais sentido com pauzinhos em vez de garfos ...
FrustratedWithFormsDesigner

4
@ Frustrado, é por isso que eles precisam pensar muito.

Não acho que substituir os pauzinhos por garfos funcione muito bem. :)
Tyanna

4
Eu gosto mais da analogia dos pauzinhos. Você definitivamente precisa de dois pauzinhos para comer. Você realmente não precisa de dois garfos. A coisa dos garfos realmente confunde o problema. Especialmente porque bifurcação é um termo-chave no multiprocessamento.
Paul Sasik

.. e então você fica preso explicando o que é um filósofo. E, por uma questão de causa, perguntarão por que precisam de dois garfos (o que é meio idiota da perspectiva dos 7 anos) e por que alguém esperaria antes de comer!
Tipo anônimo

-1

Suponha que você (a criança) esteja jogando uma bola na sua cabeça. Depois de cada salto, você está contando, ou seja, número de saltos. Além disso, depois de cada salto, você está dizendo as letras do alfabeto (A, B, C, ...)

Garoto, você é multithreading.


-1

Placas giratórias é um bom exemplo. Pense nas pessoas mágicas que pegam alguns pratos e os fazem girar ao mesmo tempo. O mágico está constantemente alternando entre as placas para garantir que todas fiquem girando.


-2

Um computador pode realmente funcionar apenas em uma coisa de cada vez, mas pode fazer as coisas muito rapidamente. (Estou deixando de fora o processamento com vários núcleos por simplicidade.) Mas e se você quiser ouvir música e jogar ao mesmo tempo? O computador (muito rapidamente) alterna entre lidar com a música e lidar com o jogo.


"Mas por que não faz as duas coisas ao mesmo tempo?"
Mateen Ulhaq

-2

Nosso playground local possui um slide triplo e um slide único. Rosquear é como o slide triplo, 3 crianças podem deslizar simultaneamente. Mas no slide único, duas crianças precisam esperar no topo para que a primeira criança desça.

Parte da descrição do trabalho estava sendo reportada ao CFO?


-3

Duas crianças em um playground compartilham (brigam) recursos limitados, dizem as peças de lego necessárias de uma pequena caixa para fazer seus robôs favoritos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.