Come spiegheresti il ​​multi threading a un bambino di sette anni?


21

Se dovessi spiegare il concetto di multi-threading a un bambino di sette anni come lo faresti? Recentemente ho ricevuto questa domanda in un'intervista. Mi è venuta in mente una storia che utilizzava lavori (il compito da svolgere) e lavoratori (i fili), ma non era del tutto convincente (considerando che il bambino è troppo giovane).

Se ti venisse chiesto di descriverlo, come lo faresti?


55
Chiederei all'intervistatore se stava pianificando di assumere bambini di 7 anni.
Craige

14
Avrei dato un pugno all'intervistatore in faccia.
Morons

11
Probabilmente è per provare che conosci abbastanza bene la materia per insegnarla a qualcuno che non ha assolutamente conoscenza della materia.
FrustratedWithFormsDesigner

6
@Morons Innanzitutto, è un po 'violento. In secondo luogo, le tue parole sono in maiuscolo a causa di un significato speciale?
Nicole

11
@FrustratedWithFormsDesigner Bene, è dannatamente stupido. Puoi spiegare numeri complessi a qualcuno che non sa come contare? No? Allora sei spazzatura a numeri complessi.
biziclop,

Risposte:


35

Descrivi di cosa si tratta, lascia semplicemente fuori i termini tecnici ad eccezione delle definizioni:

  1. Hai cinque lavori da svolgere. Devi iniziare a lavorare su tutti in questo momento.
  2. Ogni lavoro è un thread.
  3. Tu sei il processore.
  4. Dedica un po 'di tempo a lavorare su ogni lavoro, quindi passa a quello successivo, assicurandoti di prestare attenzione a tutti loro.
  5. Se hai più persone, un lavoro può essere svolto da una sola persona alla volta.
  6. Poiché ogni persona può svolgere un lavoro diverso, più persone possono svolgere tutto il lavoro più rapidamente, se si dispone di più di un lavoro.

15
Penso che l'unica cosa che aggiungerei sia forse cambiare "lavori" in "giochi" o giocare con i giocattoli o fare le faccende o i compiti.
bethlakshmi,

Quindi se hai "il processore" "nota" quando stanno lavorando a un lavoro, puoi spiegare la cache e la coerenza della cache in un ambiente a più processori
Steven Evers,

Buona descrizione, ma conoscendo i bambini di 7 anni, questo non volerà.
terra rossa

@el fusore Io sono una di 7 anni! o almeno i ac lke 1 hahahahahaha
Mateen Ulhaq

@bethlakshmi, stai supponendo che a 7 anni molti bambini stiano ancora giocando e non siano ancora usciti e abbiano ottenuto lavori produttivi? Dai!
Tipo anonimo

22

Ehi ragazzo. Hai mai camminato e masticato una gomma allo stesso tempo mentre pensavi a Pokemon? Questo è il tuo multi-threading cerebrale.


1
Questa è la periferia del tuo cervello in grado di agire in modo relativamente indipendente. È (quasi) come il tuo cervello che usa DMA.
Nick T

@nick T, più simile al cloud computing senza solo l'accesso al codice sorgente ai componenti. Anche la persona che mastica la gomma non ha idea di come stiano effettivamente eseguendo l'azione.
Tipo anonimo

@Ano, la tua ultima affermazione sembra rafforzare la mia analogia periferica. La periferica fa cose senza che la CPU scenda nelle minuzie, semplicemente delegandola. Suppongo che potresti anche dire che è come il cloud computing, ma su una scala molto più ampia; DMA e periferiche sono di livello piuttosto basso.
Nick T

veramente? Avrei pensato che giocare a Pokemon (risoluzione di problemi di ordine superiore) avrebbe sicuramente richiesto la memoria in modalità utente e l'uso di un linguaggio di programmazione di livello superiore, ma forse qualcosa come il mastice potrebbe essere il DMA.
Tipo anonimo

10

Collegalo a qualcosa che possono facilmente capire. Auto su una strada.

Pensa a una strada a senso unico. Con 12 macchine sopra, guidano uno dopo l'altro. E solo una macchina può finire allo stesso tempo, e una macchina più veloce, non può passare quelle più lente.

Ma, con il multi-threading, è come se tutte quelle macchine stessero percorrendo una strada larga con quattro corsie. Le auto più veloci possono superare quelle più lente.

Modifica: e, se non stanno attenti, possono schiantarsi l'uno contro l'altro ...


4
Se il multi-threading è una strada, allora è uno in cui quando un'auto sta guidando, l'altra non si muove affatto - non seguendo dietro di essa ...
Nicole

@Renesis, buon punto, suppongo che potrei cambiare l'esempio in uno stretto ponte che solo una macchina può attraversare alla volta perché due macchine sarebbero due pesanti ...
CaffGeek

10

Lo spiegherei come fare il bucato.

Hai 3 carichi di biancheria, una lavatrice e un'asciugatrice.

Il modo in cui tutti fanno il bucato è spostare il primo carico nell'asciugatrice piuttosto che mettere il carico successivo per il lavaggio.

Ogni bambino capirà che attendere che il primo carico si asciughi prima di iniziare a lavare il secondo carico richiederebbe più tempo.

Potresti anche fare un ulteriore passo spiegando se hai più lavatrici e asciugatrici (come in una lavanderia a gettoni), puoi fare i carichi più velocemente.


2
Inoltre non puoi asciugare il bucato fino a quando un carico non è passato attraverso la lavatrice, quindi puoi anche descrivere il blocco
zzzzBov

Ti ho quasi dato un +1 ma poi mi sono reso conto che nessun bambino nella loro mente giusta avrebbe seguito questa spiegazione. Per cominciare hai usato qualcosa di estremamente noioso (dal punto di vista dei bambini, non mio) che è un lavoro ingrato. Non appena dici la parola bucato la loro mente si spegne, letteralmente sentono solo le prime 7 parole.
Tipo anonimo

6

Cucinare un pasto con diversi piatti su una piccola stufa. Hai due bruciatori (cioè processori o anime) e quattro piatti (fili) per cucinare. Quindi è possibile cuocere (eseguire) al massimo solo due piatti alla volta. Piatti diversi hanno tempi di cottura diversi. Il cuoco (il sistema operativo) deve destreggiarsi tra loro in modo che tutto venga cucinato in tempo per la cena.


3

Un giocoliere da circo che inizia con due palle e aggiunge gradualmente sempre più palle al suo atto.


Questa è la risposta migliore perché risponde alla domanda dal punto di vista di un bambino di 7 anni, non di un programmatore di 30 anni.
Tipo anonimo

2

Nella mia esperienza, i bambini di 7 anni non hanno problemi con il concetto di cose diverse che accadono nello stesso tempo, come testimoniano i vari toolkit di programmazione progettati per i bambini. In particolare i kit Lego, ma anche il sistema Scratch.

Forse l'intervistatore stava semplicemente cercando di trovare una nuova prospettiva nel chiederti qualcosa di inaspettato.


2

"Ho bisogno che porti due bicchieri dalla cucina al tavolo . (Corrono, portando un bicchiere in ogni mano.) Ora, per favore, fallo di nuovo, ma usa solo una mano."


2

Alcune di queste risposte sono strabilianti ... Penso che potrei essere l'unico qui che conosce i bambini di 7 anni ???

Quindi, Johnny ... Il multi-threading è simile a quello che succede quando è tempo di pulire a scuola. Tutta la tua classe ha bisogno di ripulire dopo la fine della giornata ... Ogni bambino è fondamentalmente un filo ... raccogliere i giocattoli è il compito e la scatola dei giocattoli è una risorsa condivisa.

Nel complesso, penso che dare un pugno all'intervistatore in faccia sia una risposta migliore.


chi ha segnato questo -1 sta scherzando. crescere seriamente un senso dell'umorismo. È una domanda ridicola che dovrebbe essere trattata in questa luce.
Tipo anonimo

Questa è probabilmente una delle migliori risposte finora ascoltate. Prende il concetto e lo mette in termini comprensibili all'ascoltatore : anche se l'ascoltatore non ha idea di come codificare un'app multithread, ora capirà l'idea di base.
FrustratedWithFormsDesigner

2

Multi thread, è come avere molte cose da fare alla volta e farle poco a poco.

Ehi il giovane ragazzo curioso, ogni giorno devi mangiare, giocare e dormire; giusto? Ma perché non mangi una volta ... prendi molto fino a quando non puoi prenderne di più, poi dormi tutto il tempo che ti serve, quindi gioca e gioca a giochi interessanti?

Bene, non puoi farlo, perché se non mangi, avrai fame, non importa quanto hai preso nel pasto precedente. Se non dormi, sarai stanco e non potrai giocare con i tuoi amici. Inteso? Ci sono diverse cose che devono essere fatte, ma non possiamo farle contemporaneamente. Facciamo colazione, giochiamo, pranziamo, giochiamo di nuovo, ... e finalmente dice "buona notte".

Questo è anche il modo in cui funziona un computer: riproducono un po 'la musica, quindi passano all'immagine che stai disegnando, quindi passano di nuovo per riprodurre la musica. Ma il tempo impiegato per fare tutte queste cose mille volte è solo un battito di ciglia, quindi non puoi vederlo.


1

Hai un set di 6 attività da svolgere:

  • Fai i tuoi compiti
  • pulisci la tua stanza
  • fare la spesa
  • raccogliere le mele in giardino
  • lava i piatti
  • spazzare il portico

Ogni attività richiede 1 ora. Hai 2 fratelli.

  • Se non usi il multitasking, significa che devi fare tutto il lavoro da solo. Ci vorranno 6 ore (se inizi alle 12:00, tutte le attività saranno completate alle 18:00).
  • Se usi il multitasking, significa che puoi assegnare alcuni compiti ai tuoi fratelli. Se inizi a lavorare tutti allo stesso tempo, finirai tutte le attività prima. In questo caso, tutti e 3 farete 2 compiti ciascuno, il che richiederà 2 ore (se inizi tutti alle 12:00, tutte le attività saranno completate alle 14:00!).

0

Hai un joystick / controller di gioco.

Ci sono 4 bambini. Ogni bambino a turno gioca ogni livello mentre gli altri riposano. Usando il lavoro di squadra, alla fine raggiungono il livello 255 *.

Mentre ogni bambino gioca, mangia anche dal sacco di patatine che solo il giocatore attuale può mangiare.

* Quindi il gioco si arresta in modo anomalo. ;)


"Perché non acquisti altri 3 controller?"

Bene, quelli sono processori multipli!


0

Classe d'arte (applicazione multi-thread)

Dal momento che non può esserci lezione senza un insegnante, è necessario un insegnante (thread principale). Quando arrivi in ​​classe ti siedi e l'insegnante tiene conto di tutti e assegna alla classe di dipingere quadri per la giornata.

L'insegnante assegna a tutti gli studenti la giornata per iniziare a dipingere (inizializzazione e assegnazione del thread).

Poiché la scuola ha solo così tante vernici, tutti dovranno condividere i colori tra loro (le vernici rappresentano la memoria).

Diciamo che stai dipingendo un drago e vuoi dargli occhi rossi folli ma qualcun altro sta usando la vernice rossa. Non puoi semplicemente andare oltre e prendere la vernice per te perché allora nessun altro sarebbe in grado di usarla. Invece, ciò che fai è educatamente chiedere di condividere (blocco delle risorse) la vernice. Ne usi un po ', poi lo passi. Potrebbe essere necessario attendere un po 'per riaverlo, ma consente a tutti coloro che ne hanno bisogno di ottenerne un po' senza combattere con la vernice (condizioni di gara).

Alla fine della lezione l'insegnante termina la lezione (iscrizione a thread).


Gioco (applicazione multi-processo)

Giocare a carte con gli amici (o gioco equivalente con oggetti da collezione):

Diciamo che ti ritrovi con i tuoi amici (processi) dopo la scuola. Non ci sono insegnanti intorno a nessuno è lì per dirti cosa fare.

Tutti si riuniscono per giocare (applicazioni multi-processo o multi-layer).

Pensi intensamente a come puoi usare le tue carte per battere i tuoi avversari (elaborazione interna) e provi a condividere idee con il tuo partner quando ti viene in mente un'idea (messaggio che passa).

Se diventi davvero bravo puoi iscriverti a un club:

Leader (programma esecutivo) Membri (sottoprogrammi)

Se il club diventa davvero bravo, potrebbe trovare un modo speciale (API) per comunicare tra loro per aiutare a migliorare la strategia.


Ho scelto di non menzionare più processori / core qui perché l'astrazione diventa piuttosto complicata (e il cambio di contesto è ancora trasparente per la maggior parte delle applicazioni). Probabilmente potrei iniziare dicendo che ogni squadra nel gioco rappresenta un processore / core separato e la maggior parte dei giochi fa ancora schifo perché permettono solo a poche squadre di giocare insieme in una partita. Il futuro potrebbe assomigliare di più a un MMORPG in cui molte persone possono giocare insieme in una partita in squadre diverse.

Cercare di sviluppare una metafora per bambini per un sistema di elaborazione distributiva su molti computer core o molte reti host sarebbe piuttosto interessante con cui giocare, ma non è quello che Op ha richiesto.


Nota:

Il messaggio che passa sopra è un riferimento alle molte forme di comunicazione che i programmi usano per parlare tra loro. Come le persone, le applicazioni hanno molti modi per parlare tra loro. Scrivere è come eseguire il piping di dati serializzati, parlare è come fare rete, sussurrare è come fare rete su una connessione crittografata, i database sono come una score card (struttura finita con dati ben definiti) e usare MSMQ è come toccare il codice morse battendo la testa contro un superficie solida.

La maggior parte delle altre forme di comunicazione oltre quella confonde troppo per me per considerarle indistinguibili.

A parte:

Se hai mai giocato a un gioco online come Halo, le persone che si uniscono ai gruppi (o diventano giocatori professionisti) di solito hanno una lingua abbreviata per dare chiamate per indirizzare l'un l'altro dove sono i giocatori dell'altra squadra e cosa stanno usando. È davvero odioso se non conosci le chiamate ma è sorprendentemente efficace durante il gioco.

È interessante come, anche se la maggior parte delle persone che vivono in una determinata cultura parlano una lingua comune ma all'interno di quella cultura le persone sviluppano linguaggi di dominio brevi e brevi che sono ottimizzati per gestire compiti specifici. Nel calcolo lo confronterei con un'API.


-1

Usa un modello ampiamente adottato: i filosofi che cenano.

5 filosofi mangiano la cena a base di pasta.

5 forchette disponibili intorno al tavolo.

Ogni filosofo ha bisogno di due forchette per mangiare.

Alcuni mangiano Alcuni filosofano mentre aspettano.


2
I filosofi mangiano con due forchette? Amico, sono persino più strani di quanto pensassi! : P Questa storia ha più senso con le bacchette invece delle forchette ...
FrustratedWithFormsDesigner

4
@Frustrato, ecco perché hanno bisogno di pensare così tanto.

Non penso che sostituire le bacchette con le forchette funzioni bene. :)
Tyanna

4
Mi piacciono le analogie delle bacchette meglio. Hai sicuramente bisogno di due bacchette per mangiare. Non hai davvero bisogno di due forchette. La cosa delle forcelle confonde il problema. Soprattutto perché il biforcazione è un termine chiave nel multiprocessing.
Paul Sasik

.. e poi sei bloccato a spiegare cos'è un filosofo. E di causa chiederanno perché hanno bisogno di due forchette (che è un po 'stupido dal punto di vista di 7 anni) e perché di causa qualcuno dovrebbe aspettare prima di mangiare!
Tipo anonimo

-1

Supponiamo che tu (il bambino) ti faccia rimbalzare una palla in testa. Dopo ogni rimbalzo, lo stai contando, cioè il numero di rimbalzi. Inoltre dopo ogni rimbalzo stai dicendo le lettere dell'alfabeto (A, B, C, ...)

Ragazzo, sei multithreading.


-1

I piatti rotanti sono un buon esempio. Pensa a quei maghi che prendono dei piatti e li fanno girare tutti contemporaneamente. Il mago passa costantemente da una piastra all'altra per assicurarsi che rimangano tutti in rotazione.


-2

Un computer può davvero lavorare solo su una cosa alla volta, ma può fare le cose molto rapidamente. (Tralascerò l'elaborazione multi-core per semplicità.) E se volessi ascoltare musica e giocare contemporaneamente? Il computer (molto rapidamente) passa dalla gestione della musica alla gestione del gioco.


"Ma perché non fa entrambe le cose contemporaneamente?"
Mateen Ulhaq

-2

Il nostro parco giochi locale ha una tripla diapositiva e una singola diapositiva. Il threading è come la tripla diapositiva, 3 bambini possono scorrere contemporaneamente verso il basso. Ma sulla singola diapositiva due bambini devono aspettare in cima affinché il primo bambino scenda dalla diapositiva.

Parte della descrizione del lavoro era riferita al CFO?


-3

Due bambini in un parco giochi che condividono (combattendo) risorse limitate, dicono i pezzi lego richiesti da una piccola scatola per creare i loro robot preferiti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.