您如何向一个7岁的孩子解释多线程处理?


21

如果您必须向一个7岁的孩子解释多线程的概念,您将如何做?我最近在一次采访中遇到了这个问题。我想出了一个使用工作(要完成的任务)和工作人员(线程)的故事,但这并不完全令人信服(认为孩子还太小)。

如果要求您描述这一点,您将如何做?


55
我会问面试官他/她是否打算雇用任何7岁的孩子。
Craige

14
我本来可以打脸的。
白痴” 2011年

11
可能是为了测试您是否足够了解该主题,以便将其教给完全不了解该主题的人。
FrustratedWithFormsDesigner

6
@Morons首先,这有点暴力。第二,由于特殊含义,您的文字大写吗?
妮可(Nicole)

11
@FrustratedWithFormsDesigner好吧,这真是愚蠢。您可以向不知道如何计算的人解释复数吗?没有?那你就是个复杂的数字。
biziclop 2011年

Answers:


35

描述它是什么,只删除定义以外的技术术语:

  1. 您有五个工作要做。您需要立即开始处理所有这些。
  2. 每个作业都是一个线程。
  3. 您是处理器。
  4. 花一点时间从事每项工作,然后转到下一项,确保您将所有精力都放在心上。
  5. 如果您有更多的人,一份工作只能一次由一个人进行。
  6. 由于每个人都可以从事不同的工作,因此,如果您有多个工作,那么更多的人可以更快地完成所有工作。

15
我认为我唯一要添加的就是将“工作”更改为“游戏”,或者玩玩具,做家务或做家庭作业。
bethlakshmi 2011年

然后,如果您在工作时有“处理器”“保留笔记”,则可以在多处理器环境中解释缓存和缓存的一致性
Steven Evers

很好的描述,但是知道7岁的孩子不会飞。
红尘

@el定影我一个7岁!or atlest i ac lke 1 haha​​hahahaha
Mateen Ulhaq 2011年

@bethlakshmi,您以为大多数孩子中有7个仍在玩游戏,还没有出去工作呢?来吧!
匿名类型

22

嘿,小子。您是否曾经在想过《口袋妖怪》时同时走路嚼过口香糖?那就是你的大脑多线程。


1
那就是您大脑的外围设备能够相对独立地起作用。(几乎)就像您的大脑使用DMA。
尼克T

@nick T,更像是云计算,仅源代码无法访问组件。即使是嚼口香糖的人也不知道他们实际上是如何执行动作的。
匿名

@Ano,您的最后一句话似乎加强了我的外围类比。外设无需CPU仔细研究细节即可完成工作,只需将其委派即可。我猜您也可以说它就像云计算一样,但是规模更大。DMA和外设相当低级。
尼克T

真?我本以为玩口袋妖怪(解决高阶问题)肯定会需要用户模式内存和使用更高级别的编程语言,但是诸如咀嚼之类的东西可能是DMA。
匿名类型,

10

将其与他们容易理解的东西联系起来。在路上的汽车。

想想单车道。他们开着12辆车,一个接一个地开车。而且只有一辆汽车可以同时完成,而更快的汽车则无法通过较慢的汽车。

但是,有了多线程,就好像所有这些汽车都在四车道的宽阔道路上行驶一样。较快的汽车可以超越较慢的汽车。

编辑:并且,如果他们不小心,它们可能会相互撞向...


4
如果说多线程是一条路,那它就是当一辆车在行驶时,另一辆车根本不行驶-不跟在它后面……
Nicole

@Renesis,好点,我想我可以将示例更改为一条狭窄的桥,一次只能一辆车通过,因为两辆车将是两个笨重的……
CaffGeek 2011年

10

我会像洗衣服一样解释它。

您有3份洗衣,一台洗衣机和一台烘干机。

每个人都洗衣服的方法是将第一个负载移入烘干机,而不是将下一个负载移入烘干机。

任何孩子都会明白,在开始洗涤第二批货物之前,等待第一批货物变干会花费更多的时间。

您甚至可以通过解释一下如果您有更多的洗衣机和干衣机(例如自助洗衣店)来更进一步,则可以更快地进行装载。


2
此外,您必须等到负载通过洗衣机后才能烘干衣物,所以您也可以描述阻塞
现象-zzzzBov 2011年

我差点给您+1,但后来我意识到,在他们的正确想法中,没有孩子会听从这种解释。对于初学者,您使用了非常无聊的内容(从孩子的角度来看,不是我的),这很麻烦。一旦您说出“洗衣服”这个词,他们的头脑就关闭了,他们实际上只会听到前7个词。
匿名类型,

6

用小炉子上几道菜做饭。您有两个燃烧器(即处理器或核心)和四个要烹饪的盘子(线程)。因此,一次最多只能煮两道菜。不同的菜肴有不同的烹饪时间。厨师(操作系统)必须处理所有这些问题,以便在晚餐前及时煮熟所有东西。



2

根据我的经验,七岁的孩子在同一时间进行不同事物的概念没有问题,这是为儿童设计的各种编程工具包所见证的。尤其是乐高套件,还有Scratch系统。

也许面试官只是想在询问您意想不到的事情上找到新的角度。


2

“我需要你从厨房拿两杯到桌子(它们跑着,每只手都拿着一只玻璃杯。)现在,请再做一次,但只能用一只手。”


2

这些答案中有些令人难以置信...我想我可能是唯一认识7岁小孩子的人了吗???

因此,Johnny ...多线程类似于在学校打扫时间时发生的情况。一天结束后,您所有的班级都需要清理……每个孩子基本上都是一个线程……接玩具是任务,玩具箱是共享资源。

总的来说,我认为对面试官打脸是一个更好的答案。


标记为-1的人都在自欺欺人。认真培养幽默感。鉴于此,这是一个荒谬的问题。
匿名类型

到目前为止,这可能是最好的答案之一。它接受了这个概念,并用听众可以理解的术语来表达它-即使听众不知道如何编写多线程应用程序,他们现在也将了解基本概念。
FrustratedWithFormsDesigner

2

多线程,就像一次要做很多事情,一点一点地做。

嘿,好奇的年轻人,每天您必须吃饭,玩耍和睡觉。对?但是,为什么不吃一次……多吃点,直到不能多吃,然后一直需要睡觉,然后玩有趣的游戏?

好吧,你不能那样做,因为如果你不吃东西,那么无论你前一顿饭有多少,你都会感到饥饿。如果你不睡觉,你会很累,无法和朋友一起玩。明白了吗 有几件事需要完成,但是我们不能一次完成。我们吃早餐,玩游戏,吃午饭,再玩游戏,……最后说“晚安”。

这也是计算机的工作方式:他们稍微播放音乐,然后切换到您正在绘制的图片,然后再次切换以播放音乐。但是,花一千次时间来完成所有这些事情所花费的时间只是眨眼,所以您看不到它。


1

您必须执行6组任务:

  • 做你的作业
  • 打扫房间
  • 负责购物
  • 在花园里摘苹果
  • 洗碗
  • 扫门廊

每个任务需要1个小时来完成。你有两个兄弟。

  • 如果您不使用多任务处理,则意味着您必须自己完成所有工作。这将花费您6个小时(如果您从12:00开始,所有任务将在18:00完成)。
  • 如果您使用多任务处理,则意味着您可以将一些任务交给兄弟。如果所有人都同时开始工作,那么您将更快地完成所有任务。在这种情况下,你们三个都将分别执行2个任务,这将花费2个小时(如果您都从12:00开始,则所有任务都将在14:00完成!)。

0

您只有一个操纵杆/游戏控制器。

有4个孩子。每个孩子轮流玩每个关卡,而其他人则休息。通过团队合作,他们最终达到了255 *级。

在每个孩子玩耍的同时,他也从只允许当前玩家进食的一袋筹码中进餐。

*然后游戏崩溃。;)


“为什么不再购买3个控制器?”

好吧,那是多个处理器!


0

美术课(多线程应用程序)

由于没有老师就无法上课,因此您需要一位老师(主线程)。当您上课时,您需要坐下来,老师会为每个人负责,并分配班级为当天的绘画作画。

老师分配当天所有的学生开始绘画(线程初始化和分配)。

因为学校只有这么多的颜料,所以每个人都必须彼此共享颜色(颜料代表记忆)。

假设您正在画一条龙,想要给它疯狂的红色眼睛,但其他人正在使用红色颜料。您不能只为自己拿油漆,因为那样的话,其他人将无法使用它。相反,您要做的是礼貌地要求共享(资源锁定)绘画。你用一点,然后传递下去。您可能需要稍等片刻才能将其取回,但是它允许需要它的每个人都可以在不打油漆的情况下(比赛条件)得到一些。

在课程结束时,老师将课程解散(线程加入)。


游戏(多进程应用程序)

与朋友一起玩纸牌游戏(或与收藏品同等的游戏):

可以说放学后和朋友(过程)在一起。周围没有老师,没有人告诉你该怎么做。

每个人都聚在一起玩游戏(多进程或多层应用程序)。

您会认真思考如何使用卡片打败对手(内部处理),并在提出想法(消息传递)时尝试与伴侣共享想法。

如果您真的好起来,您可以加入一个俱乐部:

负责人(执行程序)成员(子程序)

如果俱乐部真的变得不错,他们可能会提出一种特殊的方式(API)相互交流,以帮助更好地制定策略。


我选择这里不提及多个处理器/内核,因为抽象变得相当复杂(上下文切换对于大多数应用程序仍然是透明的)。我可能首先要说的是,游戏中的每个团队都代表一个单独的处理器/核心,并且大多数游戏仍然很烂,因为它们只允许少数团队一起玩游戏。未来看起来更像是MMORPG,许多人可以在许多不同的团队中一起玩游戏。

尝试在多台核心计算机或许多主机网络上为分布式处理系统开发一个孩子的比喻,这很有趣,但这并不是Op所要求的。


注意:

上面传递的消息是对程序用来相互交谈的多种通信形式的引用。像人一样,应用程序有很多互相交流的方式。书写就像管道序列化的数据,说话就像网络连接,窃窃私语就像是通过加密连接进行联网,数据库就像记分卡(具有清晰定义的数据的有限结构),而使用MSMQ就像是通过将头部砸向键盘来敲击莫尔斯电码坚硬的表面。

除此以外的大多数其他交流形式都变得太模糊了,以至于我认为它们难以区分。

在旁边:

如果您曾经玩过类似Halo这样的在线游戏,那么加入小组(或成为职业玩家)的人通常会用较短的语言来发出呼喊声,以使对方了解对方在哪玩游戏。如果您不知道召集的话,这确实很令人讨厌,但是在游戏过程中它出奇的有效。

有趣的是,即使生活在给定文化中的大多数人都讲一种通用语言,但在该文化中,人们却开发了较短的简洁领域语言,这些语言经过优化可处理特定任务。在计算中,我会将其与API进行比较。


-1

使用被广泛采用的模式:餐饮哲学家。

5名哲学家在吃意大利面晚餐。

桌子周围有5个货叉。

每个哲学家都需要两个叉子来吃饭。

吃吧 有些人在等待时进行哲学思考。


2
哲学家用两把叉子吃饭?伙计,他们比我想象的还要陌生!:P这个故事用筷子代替叉子更有意义...
FrustratedWithFormsDesigner

4
@沮丧,这就是为什么他们需要这么多思考。

我认为用叉子代替筷子效果不佳。:)
Tyanna 2011年

4
我更喜欢筷子的比喻。你肯定需要两把筷子吃。您实际上不需要两个叉子。叉子的事情实际上使这个问题感到困惑。特别是因为分叉是多处理中的关键术语。
Paul Sasik 2011年

..然后您不停地解释什么是哲学家。原因是他们会问为什么需要两把叉子(从7yo的角度来看这有点傻),以及为什么有人要等着才吃呢!
匿名类型,

-1

假设您(孩子)弹跳着头上的球。每次跳动后,您都在进行计数,即跳动次数。同样,每次弹跳后,您都在说字母表中的字母(A,B,C,...)

小子,你是多线程的。


-1

旋转板就是一个很好的例子。想想那些魔术师们,他们拿一些盘子并使它们同时旋转。魔术师不断在盘子之间切换,以确保它们都保持旋转。


-2

一台计算机实际上一次只能处理一件事情,但是却可以很快地完成工作。(为简单起见,我省略了多核处理。)但是,如果您想同时听音乐和玩游戏该怎么办?计算机(非常快速地)在处理音乐和处理游戏之间切换。


“但是为什么不同时做两个呢?”
Mateen Ulhaq 2011年

-2

我们当地的游乐场有三张幻灯片和一张幻灯片。穿线就像三重滑梯,三个孩子可以同时滑落。但是在一张幻灯片上,两个孩子必须在顶端等待第一个孩子从幻灯片上下来。

职位描述的一部分是否报告给CFO?


-3

操场上的两个孩子共享(争夺)有限的资源,说一个小盒子需要的乐高积木才能制作自己喜欢的机器人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.