如何精确地可视化程序主路径的最后一个命令之后发生的事情?

2024-06-07 15:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在画教育漫画,解释基本的编程概念。目前,我正在做一个关于控制流的工作,有一个领域让我感到困惑:在完成控制流中程序最终主路径的所有命令之后,计算机做了什么。你知道吗

我以为它会“退出”程序作为结束它的一种方式,但其他消息来源说,非常被动地,“程序退出计算机。”这部分听起来很奇怪,因为当我可视化控制流时,计算机正在一个接一个地执行命令,直到它碰到某种程序的“结束”。你知道吗

这是我的作品草稿,解释我在处理什么:

https://prairieworldcomicsblog.files.wordpress.com/2018/03/controlflowpencil.pdf

在这部漫画的结尾,什么是最好的隐喻来形象化这个“结局”?你知道吗


Tags: 命令路径程序概念可视化编程计算机方式
3条回答

好吧,在某种程度上,你可以把操作系统想象成一个更高层次的程序,暂时把控制权交给用户的程序(现实情况更复杂,因为fork和许多并行运行的进程,但你可能忽略了这一点)。当程序结束时,控制返回到操作系统,就像函数在程序中结束后控制返回到主流程一样。你知道吗

因此,也许您应该在程序的末尾有一个“warp portal”,并描述它是如何将您引导回操作系统程序的控制流(例如命令提示符)的。你知道吗

我对你的一些形象有一个建议,与你现在的问题无关。如果您在控制流“road”中使用分叉和合并,那么描述一些控制结构(如else分支)可能会更容易,而不是总是使用带您返回主路径的扭曲门户。门户绝对是有用的,但我将它们限制在调用和从函数返回之类的事情上。你知道吗

一个if(和elif/else)只是一个岔路口。两个(或更多)分支可以在一段时间后重新组合,因此如果您原谅我糟糕的ASCII艺术,您可能会有这样的结果:

        > if block  >
      /                \
 > if -> else block -> regular control flow resumes ->

一个while循环非常相似,它只是让它的块流朝另一个方向运行,所以在分支分离之前合并:

  <- while block <-
 /                 \
|                   ^
v                   |
 \                 /
 -> while condition -> regular control flow resumes ->

解释器的生命周期在https://wiki.python.org/moin/CPythonInterpreterInitialization可视化。定稿部分基本上是:

  • sts=<;以请求的任何模式运行用户代码的结果>
  • ^{}
  • 退出状态sts

这里没有解释Py_Finalize的作用。一些解释在its documentation中:

Undo all initializations made by Py_Initialize() and subsequent use of Python/C API functions, and destroy all sub-interpreters that were created and not yet destroyed <...>

Bugs and caveats: The destruction of modules and objects in modules is done in random order; this may cause destructors (__del__() methods) to fail when they depend on other objects (even functions) or modules. <...>

所以,粗略地说,它垃圾收集包括模块在内的所有对象。在此之前它还调用atexit处理程序。函数的源代码可以在in ^{} for Py2^{} for Py31中找到,在那里可以获得更精确的图片。你知道吗

我不知道如何在儿童漫画中表达这一点(也就是说,你没有涉及初始化序列),但基本上,这就是发生的事情。你知道吗


1其中它只包含对Py_FinalizeEx的调用,因此我直接链接到该例程。

一个计算机程序就像一个小镇(或主城),建在你旅途的道路上,而计算机可能就是这个国家(或地球)。你知道吗

当你开始一个新的项目时,就好像你在开车(或步行)游览那个城市。你要么穿过大街,什么都不做就离开了小镇(也许是说“大家好”),要么决定去商店(在那里你回答了一个IF问题“你想购物吗?”)。然后你喜欢这个小镇,想在这里住几天(如果有人回答的话)。现在你陷入了“醒来,吃早餐,出去,玩,吃午餐,去寻找更多的乐趣,吃晚餐,睡觉”的循环中。这里的每个活动都有自己的决策树和循环。最后,你又把车开到出口,离开了小镇。你知道吗

就这样!你离开这个城镇,继续你的旅程到另一个城镇。它是在那里访问另一天,作为一个程序写在磁盘上。这并不是你当前活动行程的一部分。这就是全部。你知道吗

哦,顺便说一句,你就是这个比喻的CPU。你是执行所有这些计划的人。如果你有朋友或家人在身边,这意味着你也可以同时处理多个任务。如果你计划好整个旅程,你也可以成为程序员。你知道吗

当一个程序结束时所发生的只是从活动内存中删除到下一次运行,而不是从计算机中删除。就像那个小镇。计算机继续执行其他活动程序,同时在其操作系统上运行多个程序(多任务)。关闭电脑的类比是什么?你可以想象我猜。你知道吗

ps:这不仅仅是一个与python相关的话题,你知道的,对吧?你知道吗

相关问题 更多 >

    热门问题