7歳の子供にマルチスレッドをどのように説明しますか?


21

マルチスレッドの概念を7歳の子供に説明する必要がある場合、どうしますか?最近、インタビューでこの質問を受けました。私は仕事(やるべき仕事)と労働者(スレッド)を使ったストーリーを思いつきましたが、それは完全に納得のいくものではありませんでした(子供は若すぎると考えています)。

これについて説明するように頼まれた場合、どうしますか?


55
インタビュアーに、7歳の子供を雇うつもりかどうか尋ねます。
クレイジュ

14
面接官をパンチしたでしょう。
モロンズ

11
おそらく、その主題について全く知識のない人に教えるのに十分なほど主題をよく知っていることをテストすることでしょう。
FrustratedWithFormsDesigner

6
@Moronsまず第一に、それは少し暴力的です。第二に、特別な意味のためにあなたの言葉は大文字になっていますか?
ニコール

11
@FrustratedWithFormsDesignerまあ、それは血まみれの愚かです。カウント方法がわからない人に複素数を説明できますか?いや?その場合、複素数でごみが発生します。
biziclop

回答:


35

それが何であるかを説明し、定義以外の技術用語を省いてください:

  1. あなたには5つの仕事があります。今すぐすべての作業を開始する必要があります。
  2. 各ジョブはスレッドです。
  3. あなたはプロセッサです。
  4. 各ジョブに少し時間を費やしてから、次のジョブに移動して、すべてのジョブに注意を払ってください。
  5. より多くの人がいる場合、ジョブは一度に1人しか作業できません。
  6. 各人が異なる仕事に取り組むことができるため、複数の仕事がある場合、より多くの人がすべての仕事をより速く終わらせることができます。

15
追加するのは、「ジョブ」を「ゲーム」に変更したり、おもちゃで遊んだり、家事や宿題をしたりすることだけだと思います。
ベスラクシュミ

彼らは仕事に取り組んでいるときに、「プロセッサ」「キープ・ノート」を持っている場合次に、あなたは複数のプロセッサENVでキャッシュとキャッシュの一貫性を説明することができます
スティーブン・エヴァース

良い説明ですが、7歳を知っているので、これは飛びません。
赤土

@el fuser私 7歳です!またはatlest i ac lke 1
hahahahahaha

@bethlakshmi、あなたは7歳でまだほとんどの子供たちがまだゲームをしていて、まだ出て行って生産的な仕事をしていないと仮定していますか?いい加減にして!
匿名タイプ

22

やあキッド。ポケモンのことを考えながら、歩いてガムを噛んだことはありますか?それがあなたの脳のマルチスレッド化です。


1
それはあなたの脳の周辺機器が比較的独立して行動できることです。DMAを使用する脳に似ています。
ニックT

@nick T、コンポーネントへのソースコードアクセスなしのクラウドコンピューティングに似ています。ガムを噛んでいる人でさえ、彼らが実際にどのように行動を行っているのか分かりません。
匿名タイプ

@Ano、あなたの最後の声明は私の周辺の類推を強化するようです。周辺機器は、CPUが特徴点を詳しく調べることなく、単に委任するだけで処理を行います。クラウドコンピューティングのようなものとも言えるかもしれませんが、それははるかに大規模なものです。DMAと周辺機器はかなり低レベルです。
ニックT

本当に?ポケモン(高次の問題解決)をプレイするには、ユーザーモードのメモリと高レベルのプログラミング言語を使用する必要がありますが、おそらく咀asticのようなものはDMAになります。
匿名タイプ

10

彼らが簡単に理解できるものに関連付けてください。道路上の車。

単一車線の道路を考えてください。12台の車で、彼らは次々に運転します。そして、同時に完成できるのは1台の車だけで、より速い車は遅い車を追い越すことはできません。

しかし、マルチスレッドでは、これらのすべての車が4車線の広い道路を走行しているようです。速い車は遅い車を通過できます。

編集:そして、彼らが注意しないと、お互いに衝突する可能性があります...


4
その背後に従っていない... -マルチスレッドが道路であれば、それは一台の車が運転しているとき、他が全く動いていない一つだ
ニコール

@Renesis、良い点、私は...私は2台の車は、二つの重になるので一つだけの車が一度に通過することができるという狭いブリッジに例を変えることができると仮定
CaffGeek

10

洗濯をするように説明します。

洗濯物が3つ、洗濯機と乾燥機が1つずつあります。

誰もが洗濯をする方法は、洗濯のために次の荷物を置くよりも最初の荷物を乾燥機に入れることです。

子供は誰でも、最初の荷物が乾くのを待ってから2番目の荷物の洗濯を始めるのに時間がかかることを理解するでしょう。

洗濯機と乾燥機(コインランドリーなど)の数が多い場合は、負荷をより高速に処理できることを説明することで、さらに一歩進めることもできます。


2
負荷がワッシャーを経験してきたまであなたはまた、ブロッキング記述することができるようにまた、あなたは、洗濯物を乾燥することはできません
zzzzBov

私はあなたに+1を与えようとしましたが、正しい心の子供はこの説明に従わないことに気付きました。手始めに、あなたは非常に退屈なもの(私の視点ではなく、子供の視点から)を使いました。洗濯という言葉が消えると言うとすぐに、彼らは文字通り最初の7つの言葉しか聞かないでしょう。
匿名タイプ

6

小さなストーブの上でいくつかの料理と食事を調理します。2つのバーナー(プロセッサまたはコア)と4つの料理(スレッド)を調理します。したがって、一度に調理(実行)できるのは最大2つの料理だけです。料理によって料理時間が異なります。料理人(OS)は、これらすべてを調整する必要があるため、夕食に間に合うようにすべてが調理されます。


3

サーカスジャグラー。2つのボールから始まり、徐々に自分の行為にボールを追加します。


これは、30歳のプログラマーではなく、7歳の子供の観点から質問に回答するため、最良の回答です。
匿名タイプ

2

私の経験では、7歳の子供たちは同時に起こっているさまざまなことの概念に問題はありません。これは、子供向けに設計されたさまざまなプログラミングツールキットによって目撃されています。特にレゴキットだけでなく、スクラッチシステムも。

おそらく、インタビュアーは、あなたに予期しないことを尋ねるという新しい角度を見つけようとしていただけかもしれません。


2

キッチンからテーブルまで2 杯持って行く必要があります。(片手でグラスを持って走ります。)今、もう一度やり直してくださいただし、片手だけを使用してください。」


2

これらの答えのいくつかは驚くべきものです...私はここで7歳を知っている唯一の人かもしれないと思いますか?

だから、ジョニー...マルチスレッドは、学校でのクリーンアップ時に起こることと似ています。クラスはすべて一日の終わりに掃除する必要があります...各子供は基本的にスレッドです...おもちゃを拾うことがタスクであり、おもちゃ箱は共有リソースです。

全体的には、面接官を顔にぶつけた方が良い答えだと思います。


これを-1とマークした人はだれでも冗談です。ユーモアのセンスを真剣に育てます。それはその観点から扱われるべきばかげた質問です。
匿名タイプ

これはおそらくこれまでに聞いた中で最高の答えの一つです。概念を取り入れて、リスナーが理解する用語に入れます -リスナーがマルチスレッドアプリのコーディング方法を知らなくても、基本的なアイデアを理解できるようになります。
FrustratedWithFormsDesigner

2

マルチスレッドは、一度に多くのことを行い、少しずつ実行するようなものです。

ちょっと若い好奇心の強い男、毎日食べて、遊んで、寝なければならない。右?しかし、一度食べてみてください...それ以上食べられなくなるまでたくさん食べて、必要な時間ずっと寝てから、面白いゲームをプレイ&プレイしてみませんか?

まあ、それはできません。食べないと、前の食事でどれだけ食べてもお腹がすいてしまうからです。寝ないと、疲れて友達と遊べなくなります。分かりましたか?実行する必要があることがいくつかありますが、一度に実行することはできません。私たちは朝食を食べ、ゲームをし、昼食を取り、再びゲームをします...そして「おやすみなさい」と言います。

それはコンピューターの動作方法でもあります。彼らは少し音楽を再生し、次にあなたが描いている絵に切り替え、そして再び音楽を再生するために切り替えます。しかし、これらすべてのことを1000回行うのにかかった時間は、ほんの一瞬であるため、見ることはできません。


1

実行する必要がある6つのタスクのセットがあります。

  • 宿題をする
  • 部屋を片付ける
  • 買い物をする
  • 庭のりんごを選ぶ
  • 皿を洗う
  • ポーチを掃除する

各タスクの実行には1時間かかります。あなたには2人の兄弟がいます。

  • マルチタスクを使用しない場合、すべての作業を自分で行う必要があります。6時間かかります(12:00に開始する場合、すべてのタスクは18:00に完了します)。
  • マルチタスクを使用する場合、兄弟にいくつかのタスクを与えることができます。全員が同時に作業を開始する場合、すべてのタスクをより早く完了します。この場合、3人全員がそれぞれ2つのタスクを実行し、2時間かかります(全員が12:00に開始する場合、すべてのタスクは14:00に完了します!)。

0

ジョイスティック/ゲームコントローラーが1つあります。

4人の子供がいます。他の人が休んでいる間、各子供は各レベルでプレイします。チームワークを使用して、最終的にレベル255 *に達します。

各子供が遊んでいる間、彼はまた、現在のプレーヤーだけが食べることを許可されているチップの袋から食べています。

*その後、ゲームがクラッシュします。;)


「コントローラーをさらに3つ購入しないのはなぜですか?」

まあ、それらはマルチプロセッサです!


0

アートクラス(マルチスレッドアプリケーション)

教師がいないクラスは存在できないため、教師(メインスレッド)が必要です。クラスに着くと、座って先生が全員を説明し、その日の絵を描くようにクラスを割り当てます。

教師は、ペイントを開始する日のすべての生徒を割り当てます(スレッドの初期化と割り当て)。

学校には非常に多くの絵の具があるだけなので、誰もが色を共有しなければなりません(絵は記憶を表します)。

あなたがドラゴンを描いていて、それに狂った赤い目を与えたいが、他の誰かが赤い絵の具を使っているとしましょう。他の誰もそれを使用できないので、あなたはただ自分自身のために行き、ペイントを取ることはできません。代わりに、ペイントを共有(リソースロック)するよう丁寧に依頼します。少し使い、それを渡します。あなたはそれを取り戻すために少し待たなければならないかもしれませんが、それはそれを必要とするすべての人がペイントの戦い(レース条件)なしでいくつかを得ることができます。

クラスの終わりに、教師はクラスを解任します(スレッド参加)。


ゲーム(マルチプロセスアプリケーション)

友人とカードゲームをプレイする(またはグッズと同等のゲーム):

放課後に友達(プロセス)と集まるとしましょう。周りに先生がいないので、何をすべきかを教えてくれる人は誰もいません。

全員が集まってゲームをプレイします(マルチプロセスまたはマルチレイヤーアプリケーション)。

相手を打ち負かすためにカードを使用する方法(内部処理)について熱心に考え、アイデアを思いついたときにパートナーとアイデアを共有しようとします(メッセージの受け渡し)。

本当に上手になったら、クラブに参加できます:

リーダー(実行プログラム)メンバー(サブプログラム)

クラブが本当に良くなった場合、彼らはより良い戦略を立てるために互いに通信するための特別な方法(API)を思いつくかもしれません。


ここでは、抽象化がかなり複雑になるため、複数のプロセッサ/コアについては言及しませんでした(そして、コンテキストスイッチングは、ほとんどのアプリケーションに対して透過的です)。おそらく、ゲーム内のすべてのチームが別々のプロセッサ/コアを表し、ほとんどのゲームはゲーム内で少数のチームしか一緒にプレイできないため、依然として不得意だと言うことから始めることができます。将来は、多くの人々が多くの異なるチームのゲームで一緒にプレーできるMMORPGのように見えるかもしれません。

多くのコアコンピューターまたは多くのホストネットワークで分散処理システムの子供のメタファーを開発しようとすることは、遊ぶのはかなり興味深いでしょうが、それはOpが求めたものではありません。


注意:

上記のメッセージの受け渡しは、プログラムが相互に通信するために使用する多くの形式の通信への参照です。人々と同じように、アプリケーションには互いに対話する多くの方法があります。書き込みは、シリアル化されたデータのパイピングのようなものであり、会話はネットワークのようなものであり、ささやきは暗号化された接続を介したネットワークのようなものであり、データベースはスコアカードのようなものです(明確に定義されたデータを持つ有限構造)固体表面。

それ以外のほとんどのコミュニケーション形式は、私がそれらを区別できないと考えるにはあまりにもぼやけすぎます。

余談:

Haloのようなオンラインゲームをプレイしたことがある場合、グループに参加する(またはプロプレイヤーになる)人は通常、他のチームのプレイヤーがどこにいて、何を使用しているのかを互いに指示するための短い言葉を使用します。コールアウトがわからない場合は本当に不快ですが、ゲームプレイ中は驚くほど効果的です。

特定の文化に住んでいるほとんどの人が共通の言語を話すのに、その文化の中で特定のタスクを処理するために最適化された短い簡潔なドメイン言語を開発するのは興味深いことです。コンピューティングでは、APIと比較します。


-1

広く採用されているモデル:食事する哲学者を使用します。

パスタディナーを食べる5人の哲学者。

テーブルの周りに5つのフォークがあります。

各哲学者は食べるために2つのフォークを必要とします。

食べる人もいます。待っている間に哲学する人もいます。


2
哲学者は2つのフォークで食べますか?男、彼らは私が思っていたよりもさらに奇妙です!:Pは、この物語は...代わりにフォークの箸で、より理にかなって
FrustratedWithFormsDesigner

4
@Frustrated、だから彼らはそんなに考える必要がある。

箸をフォークに置き換えることはうまく機能しないと思います。:)
ティアナ

4
私は箸の類推がより好きです。必ず2本の箸が必要です。本当に2つのフォークは必要ありません。フォークのことは実際に問題を混乱させます。特に、フォークはマルチプロセッシングの重要な用語です。
ポールサシク

..そして、哲学者が何であるかを説明するあなたの立ち往生。そして、彼らはなぜ2つのフォークが必要なのか(これは7yoの観点からはちょっと馬鹿げている)と、なぜ誰かが食べる前に待つのかと尋ねます!
匿名タイプ

-1

(子供)が頭にボールをバウンドさせているとします。すべてのバウンスの後、あなたはそれ、すなわちバウンスの数を数えています。また、バウンスするたびに、アルファベットの文字(A、B、C、...)を言っています。

子供、あなたはマルチスレッドです。


-1

スピニングプレートは良い例です。いくつかのプレートを取り、それらをすべて同時に回転させるマジシャンの人のことを考えてください。マジシャンは常にプレートを切り替えて、すべてが回転するようにします。


-2

コンピュータは実際には一度に1つのことしか実行できませんが、非常に高速に処理できます。(簡単にするためにマルチコア処理は省略しています。)しかし、音楽を聴きながらゲームをプレイしたい場合はどうでしょうか。コンピューターは(非常に高速に)音楽の処理とゲームの処理を切り替えます。


「しかし、なぜ両方を同時にしないのですか?」
Mateen Ulhaq

-2

地元の遊び場には、トリプルスライドとシングルスライドがあります。スレッドはトリプルスライドのようなもので、3人の子供が同時に下にスライドできます。しかし、単一のスライドでは、2人の子供が最初の子供がスライドを降りるのを先頭で待つ必要があります。

職務内容の一部はCFOに報告されましたか?


-3

遊び場で2人の子供がリソースを共有(ファイティングオーバー)すると、限られたリソースで、お気に入りのロボットを作るために必要な小さな箱からのレゴのピースを言います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.