协慌网

登录 贡献 社区

什么是自举?

我一直看到在应用程序开发讨论中提到的 “引导”。它看起来既广泛又重要,但是对于自举实际上是什么,我什至还没有得到很好的解释。相反,似乎每个人都应该知道它的含义。我不知道据我所知,它与应用程序启动时所需的初始化任务有关,但是我可能完全错了。谁能帮助我了解这个想法?

答案

“引导” 来自术语 “用自己的引导程序拉起自己”。你可以从Wikipedia那里得到很多。

在计算中,引导加载程序是计算机启动时运行的第一段代码,负责加载其余的操作系统。在现代计算机中,它存储在 ROM 中,但是我想起了 PDP-11 上的引导过程,在该过程中,您可以通过前面板开关来戳位以将特定的磁盘段加载到内存中,然后运行它。不用说,引导加载程序通常很小。

“Bootstrapping” 也用作使用自身(或更正确地说是其前身版本)构建系统的术语。例如, ANTLR版本 3 是使用 ANTLR 版本 2 开发的解析器编写的。

在某些 Web 框架中有一个引导示例。您调用 index.php(引导程序),然后加载框架帮助程序,模型,配置,然后加载控制器并将控制权转交给它。

如您所见,这是一个启动大型过程的简单文件。

术语 “引导” 通常适用于系统依赖于自身启动的情况,有点像鸡和鸡蛋的问题。

例如:

  • 您如何编译用 C 编写的 C 编译器?
  • 如果尚未运行操作系统,如何启动操作系统初始化过程?
  • 您如何启动一个分布式(对等)系统,在该系统中,客户端依赖于其当前已知的对等方来查找系统中的新对等方?

在那种情况下,自举是指一种打破循环依赖的方法,通常是在外部实体的帮助下进行的,例如

  • 您可以使用另一个 C 编译器来编译(引导)自己的编译器,然后可以使用它来重新编译自身
  • 您可以使用单独的一段代码来设置初始过程,而无需依赖于操作系统提供的任何功能
  • 您使用初始对等方的硬编码列表或提供对等方列表的硬编码跟踪器 URL

等等。