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?
interview
teaching
multithreading
Vinoth Kumar
fonte
fonte
Respostas:
Descreva o que é, deixe de fora os termos técnicos, exceto as definições:
fonte
Ei, garoto. Você já andou e mascou chiclete ao mesmo tempo enquanto pensava em Pokemon? Esse é o seu cérebro multithreading.
fonte
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 ...
fonte
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.
fonte
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.
fonte
Um malabarista de circo começando com duas bolas e gradualmente adicionando mais e mais bolas ao seu ato.
fonte
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.
fonte
"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."
fonte
Algumas dessas respostas são alucinantes ... Acho que posso ser a única aqui que conhece crianças de 7 anos ???
No geral, acho que dar um soco na cara do entrevistador é uma resposta melhor.
fonte
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.
fonte
Você tem um conjunto de 6 tarefas que precisa executar:
Cada tarefa leva 1 hora para ser realizada. Você tem 2 irmãos.
fonte
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!
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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?
fonte
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.
fonte