我很难向妈妈解释阻止功能与非阻止功能的概念。最好的解释方式是什么?有一个很好的比喻吗?
我不知道您是否需要了解这一点,但是我们正在使用Modkit for Vex IQ,这是一种与Scratch.mit.edu非常相似的编程语言。
非常感谢您!
答案 0 :(得分:1)
您正在粉刷一个房间。您的油漆用完了,因此您将您的孩子送到商店购买更多油漆,然后等待他们回来。您阻止油漆可用。 fetch_more_paint()
函数是一项“工作”,并且由于该函数运行时您无能为力,因此会阻塞。一旦启动,它将接管直到完成。
您正在粉刷一个房间,并计划很快粉刷另一个房间。您的油漆用完了。您告诉孩子去商店拿更多油漆。然后,在没有油漆的情况下,开始为下一个绘画室做准备。当孩子用油漆回来时,您将继续绘画第一个房间。您不会阻塞绘画的可用性:fetch_more_paint()
是一个请求而不是一项工作:它是非阻塞的。发出请求后,您可以继续做您需要做的任何事情。
在不阻塞的情况下,有两种处理孩子的方法。
如果您想浪费最少的时间进行切换任务,则将完成准备工作,然后再检查是否有更多的涂料可用于恢复喷涂。否则,您选择其他事情。这是在作业之间进行轮询-您可以方便地检查非阻塞功能的完成状态。
如果您希望尽快完成绘画,请让孩子在可用绘画时尽快告诉您,然后立即恢复绘画。这会增加一些开销,因为您可能不得不在不合时宜的时候放弃正在做的事情,因此需要做更多的工作来更改正在执行的任务。