如果您必须向一个7岁的孩子解释多线程的概念,您将如何做?我最近在一次采访中遇到了这个问题。我想出了一个使用工作(要完成的任务)和工作人员(线程)的故事,但这并不完全令人信服(认为孩子还太小)。
如果要求您描述这一点,您将如何做?
如果您必须向一个7岁的孩子解释多线程的概念,您将如何做?我最近在一次采访中遇到了这个问题。我想出了一个使用工作(要完成的任务)和工作人员(线程)的故事,但这并不完全令人信服(认为孩子还太小)。
如果要求您描述这一点,您将如何做?
Answers:
描述它是什么,只删除定义以外的技术术语:
嘿,小子。您是否曾经在想过《口袋妖怪》时同时走路嚼过口香糖?那就是你的大脑多线程。
将其与他们容易理解的东西联系起来。在路上的汽车。
想想单车道。他们开着12辆车,一个接一个地开车。而且只有一辆汽车可以同时完成,而更快的汽车则无法通过较慢的汽车。
但是,有了多线程,就好像所有这些汽车都在四车道的宽阔道路上行驶一样。较快的汽车可以超越较慢的汽车。
编辑:并且,如果他们不小心,它们可能会相互撞向...
我会像洗衣服一样解释它。
您有3份洗衣,一台洗衣机和一台烘干机。
每个人都洗衣服的方法是将第一个负载移入烘干机,而不是将下一个负载移入烘干机。
任何孩子都会明白,在开始洗涤第二批货物之前,等待第一批货物变干会花费更多的时间。
您甚至可以通过解释一下如果您有更多的洗衣机和干衣机(例如自助洗衣店)来更进一步,则可以更快地进行装载。
这些答案中有些令人难以置信...我想我可能是唯一认识7岁小孩子的人了吗???
因此,Johnny ...多线程类似于在学校打扫时间时发生的情况。一天结束后,您所有的班级都需要清理……每个孩子基本上都是一个线程……接玩具是任务,玩具箱是共享资源。
总的来说,我认为对面试官打脸是一个更好的答案。
多线程,就像一次要做很多事情,一点一点地做。
嘿,好奇的年轻人,每天您必须吃饭,玩耍和睡觉。对?但是,为什么不吃一次……多吃点,直到不能多吃,然后一直需要睡觉,然后玩有趣的游戏?
好吧,你不能那样做,因为如果你不吃东西,那么无论你前一顿饭有多少,你都会感到饥饿。如果你不睡觉,你会很累,无法和朋友一起玩。明白了吗 有几件事需要完成,但是我们不能一次完成。我们吃早餐,玩游戏,吃午饭,再玩游戏,……最后说“晚安”。
这也是计算机的工作方式:他们稍微播放音乐,然后切换到您正在绘制的图片,然后再次切换以播放音乐。但是,花一千次时间来完成所有这些事情所花费的时间只是眨眼,所以您看不到它。
美术课(多线程应用程序)
由于没有老师就无法上课,因此您需要一位老师(主线程)。当您上课时,您需要坐下来,老师会为每个人负责,并分配班级为当天的绘画作画。
老师分配当天所有的学生开始绘画(线程初始化和分配)。
因为学校只有这么多的颜料,所以每个人都必须彼此共享颜色(颜料代表记忆)。
假设您正在画一条龙,想要给它疯狂的红色眼睛,但其他人正在使用红色颜料。您不能只为自己拿油漆,因为那样的话,其他人将无法使用它。相反,您要做的是礼貌地要求共享(资源锁定)绘画。你用一点,然后传递下去。您可能需要稍等片刻才能将其取回,但是它允许需要它的每个人都可以在不打油漆的情况下(比赛条件)得到一些。
在课程结束时,老师将课程解散(线程加入)。
游戏(多进程应用程序)
与朋友一起玩纸牌游戏(或与收藏品同等的游戏):
可以说放学后和朋友(过程)在一起。周围没有老师,没有人告诉你该怎么做。
每个人都聚在一起玩游戏(多进程或多层应用程序)。
您会认真思考如何使用卡片打败对手(内部处理),并在提出想法(消息传递)时尝试与伴侣共享想法。
如果您真的好起来,您可以加入一个俱乐部:
负责人(执行程序)成员(子程序)
如果俱乐部真的变得不错,他们可能会提出一种特殊的方式(API)相互交流,以帮助更好地制定策略。
我选择这里不提及多个处理器/内核,因为抽象变得相当复杂(上下文切换对于大多数应用程序仍然是透明的)。我可能首先要说的是,游戏中的每个团队都代表一个单独的处理器/核心,并且大多数游戏仍然很烂,因为它们只允许少数团队一起玩游戏。未来看起来更像是MMORPG,许多人可以在许多不同的团队中一起玩游戏。
尝试在多台核心计算机或许多主机网络上为分布式处理系统开发一个孩子的比喻,这很有趣,但这并不是Op所要求的。
注意:
上面传递的消息是对程序用来相互交谈的多种通信形式的引用。像人一样,应用程序有很多互相交流的方式。书写就像管道序列化的数据,说话就像网络连接,窃窃私语就像是通过加密连接进行联网,数据库就像记分卡(具有清晰定义的数据的有限结构),而使用MSMQ就像是通过将头部砸向键盘来敲击莫尔斯电码坚硬的表面。
除此以外的大多数其他交流形式都变得太模糊了,以至于我认为它们难以区分。
在旁边:
如果您曾经玩过类似Halo这样的在线游戏,那么加入小组(或成为职业玩家)的人通常会用较短的语言来发出呼喊声,以使对方了解对方在哪玩游戏。如果您不知道召集的话,这确实很令人讨厌,但是在游戏过程中它出奇的有效。
有趣的是,即使生活在给定文化中的大多数人都讲一种通用语言,但在该文化中,人们却开发了较短的简洁领域语言,这些语言经过优化可处理特定任务。在计算中,我会将其与API进行比较。
使用被广泛采用的模式:餐饮哲学家。
5名哲学家在吃意大利面晚餐。
桌子周围有5个货叉。
每个哲学家都需要两个叉子来吃饭。
吃吧 有些人在等待时进行哲学思考。
一台计算机实际上一次只能处理一件事情,但是却可以很快地完成工作。(为简单起见,我省略了多核处理。)但是,如果您想同时听音乐和玩游戏该怎么办?计算机(非常快速地)在处理音乐和处理游戏之间切换。