如何向我妈妈解释阻塞函数和非阻塞函数
How to explain blocking vs non-blocking functions to my mom
我无法向妈妈解释阻塞函数与非阻塞函数的概念。最好的解释方法是什么?有什么好的比喻吗?
我不知道你是否需要知道这个,但我们正在使用 Vex IQ 的 Modkit,这是一种与 Scratch.mit.edu.
非常相似的编程语言
非常感谢!
你正在粉刷一个房间。你 运行 没有油漆了,所以你让你的孩子去商店买更多的油漆,然后等他们回来。你阻止油漆变得可用。 fetch_more_paint()
函数是一个“工作”,并且是阻塞的,因为在函数 运行ning 期间你不能做任何其他事情。一旦开始,它将接管直到完成。
您正在粉刷一个房间,并计划很快再粉刷另一个房间。你 运行 油漆用完了。你告诉孩子去商店买更多的油漆。然后,您在没有油漆的情况下开始准备下一个房间进行油漆。当孩子 returns 画完后,你继续画第一个房间。您不会阻止油漆的可用性:fetch_more_paint()
是一个请求而不是一个工作:它是 non-blocking。发出请求后,您可以继续执行任何需要执行的操作。
在non-blocking场景中有两种处理孩子回来的方法。
如果你想浪费最少的时间切换任务,你就完成准备工作,然后再检查是否有更多的油漆可以继续绘画。否则,你会选择其他事情去做。这是作业之间的轮询 - 您可以在方便时检查 non-blocking 函数的完成状态。
如果你想尽快画完,你让孩子在有画的时候尽快告诉你,你马上继续画。这有更多的开销,因为你必须在可能不合时宜的时刻放弃你正在做的事情,做更多的工作来改变你正在进行的任务。
我无法向妈妈解释阻塞函数与非阻塞函数的概念。最好的解释方法是什么?有什么好的比喻吗?
我不知道你是否需要知道这个,但我们正在使用 Vex IQ 的 Modkit,这是一种与 Scratch.mit.edu.
非常相似的编程语言非常感谢!
你正在粉刷一个房间。你 运行 没有油漆了,所以你让你的孩子去商店买更多的油漆,然后等他们回来。你阻止油漆变得可用。 fetch_more_paint()
函数是一个“工作”,并且是阻塞的,因为在函数 运行ning 期间你不能做任何其他事情。一旦开始,它将接管直到完成。
您正在粉刷一个房间,并计划很快再粉刷另一个房间。你 运行 油漆用完了。你告诉孩子去商店买更多的油漆。然后,您在没有油漆的情况下开始准备下一个房间进行油漆。当孩子 returns 画完后,你继续画第一个房间。您不会阻止油漆的可用性:fetch_more_paint()
是一个请求而不是一个工作:它是 non-blocking。发出请求后,您可以继续执行任何需要执行的操作。
在non-blocking场景中有两种处理孩子回来的方法。
如果你想浪费最少的时间切换任务,你就完成准备工作,然后再检查是否有更多的油漆可以继续绘画。否则,你会选择其他事情去做。这是作业之间的轮询 - 您可以在方便时检查 non-blocking 函数的完成状态。
如果你想尽快画完,你让孩子在有画的时候尽快告诉你,你马上继续画。这有更多的开销,因为你必须在可能不合时宜的时刻放弃你正在做的事情,做更多的工作来改变你正在进行的任务。