为什么程序被分解为更小的可执行文件

时间:2014-02-01 00:07:32

标签: design-patterns ipc

为什么大型程序会被分解成较小的程序?

不仅仅是Word.exe,我假设Word.exe调用了多个可执行文件。在终端/命令提示符的情况下,我可以理解这样做的操作系统。 “Shutdown / f / s”调用shutdown程序,传递参数然后执行。

通过我的根系Galaxy S4上的系统应用程序,我看到官方相机应用程序使用的几个程序。一个叫做Best Face。为什么这是独立的,而不仅仅是在主摄像头.apk?

有更好的理由吗?我对编程比较陌生,我还没有开始阅读设计模式,所以也许我过早地提出这个问题了。

我可以看到一些好处,比如RAM的使用;只在需要时使用你需要的东西。 我还可以看到这是更好地修补错误和提高可读性的一个原因,但是标题(如C ++的情况)提供了这种好处。

我已经看过这个问题了,我唯一能找到答案的答案是将程序分解为单独的文件,比如C ++中的Headers。

3 个答案:

答案 0 :(得分:2)

嗯,有几个原因,其中一些你自己已经想到了,比如记忆。

执行较少任务的较小程序更易于开发,测试和维护。

你不想仅仅因为某人将bug引入其中的一小部分而打破整个系统。就像将所有鸡蛋放在同一个地方一样。

另外,考虑到许多程序/系统是由不同的团队开发的,这些项目在不同的时间开始/停止。

有时候,你有一个具有并行开发源代码分支的应用程序,因为下一个软件版本不能等待上一个软件版本因为上市时间而开始。

如果它们很小并且是自包含的,具有明确定义的功能,它们可以组合起来以解决更复杂的事情。 (参见“实用程序员:从熟练工到硕士”一书关于UNIX工具的书)。

你也可能想要扩展一些程序功能,所以你仍然具有插件能力...你会如何在一个单片的东西中做到这一点?

答案 1 :(得分:2)

这是解决具体问题的解决方案。以下是一些例子:

  1. 按照设计,您的应用程序必须分发,因为它需要在通过网络通信的多台计算机上运行(例如,客户端/服务器应用程序)。因此,您需要在不同的计算机上运行多个不同的进程。但是,这并不意味着您的计算机无法承载多个此类进程。关键在于,通过设计,您只需要将应用程序的不同部分分开,以便每个部分都可以在任何地方运行,只要它可以访问(通过网络或IPC)。示例:调试器,启动编译器的IDE,客户端/服务器应用程序(如某些本地独立运行服务器的游戏),C / C ++编译器(通常为每个编译单元分叉进行编译),等等。

  2. 您需要隔离每个不同流程的失败。如果一个进程失败,您可能无法从进程本身做任何事情来尝试修复它或以任何方式管理失败。因此,您需要一个单独的进程来“监视”其他进程。如果一个进程死亡,它不会杀死其他进程。例如,如何设计Chrome(互联网浏览器):每个标签都是一个过程。这样,如果执行网页出现问题,整个选项卡甚至会崩溃,它不会立即杀死所有选项卡,就像之前使用其他浏览器一样(从那时起采用了类似的策略)。基本上,沙盒。另请参阅:https://softwareengineering.stackexchange.com/questions/202089/chromes-multiple-process-per-each-tabs

  3. 内存限制:如果您的目标计算机是32位,并且您可以很容易地达到这意味着的内存地址限制,那么您需要将应用程序拆分为多个进程,以便每个进程都拥有自己的地址空间。我不完全确定,但我认为我已经读过Visual Studio(仍然是32位可执行文件)的地方也因为这个原因(其中包括)使用了很多不同的进程。当然,当你可以独家使用64位时问题就不那么重要了,但并不是每个人都拥有这种奢侈品。

答案 2 :(得分:1)

这是一个非常广泛的领域,其中具有多个可执行文件只是一个方面。这一切都归结为管理复杂性。

CPU,无论是在服务器,台式计算机还是智能手机上,都可以处理从内存中读取的指令,而无需了解可执行文件。如果复杂性不是软件开发中的问题,那么将指令传递给CPU的方式可能不涉及可执行文件。在计算机时代的开始,通过手动直接操作存储器来编程计算机 - 通过推动开关。如果计算机必须执行任务,则按照这种方式进行编程。

后来,boot loaders让人类操作员有机会选择性地将指令加载到存储器中,例如从穿孔卡或磁带中加载。现在,程序可以存储在计算机外部并重复使用。在某种程度上,这些是第一批可执行文件。

随着处理能力,内存和存储空间的增长,必须有一个系统来管理所有这些资源,因此开发了操作系统。现在,计算机的操作员不需要自己管理穿孔卡和磁带。这些程序现在可以在文件系统上使用。可以加载到内存并运行的文件是可执行文件。只需通过指示操作系统执行文件即可完成任务的运行。

现在,有机会将他们的程序作为文件系统上的文件进行管理,运营商能够将可执行文件的使用链接在一起,以构建更复杂的应用程序。这样,单个可执行文件就可以重用于不同的应用程序。它还使其他事情成为可能,在你的问题的其他答案中有所描述。

今天,您的计算机或智能手机上仍然存在操作和文件系统的这些原则。这一切都始于计算机操作员在没有按下开关的情况下寻找编程计算机的方法。