Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 为什么程序被分解成更小的可执行文件_Design Patterns_Ipc - Fatal编程技术网

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

Design patterns 为什么程序被分解成更小的可执行文件,design-patterns,ipc,Design Patterns,Ipc,为什么大程序被分成小程序 不仅仅是Word.exe,我假设Word.exe调用了多个可执行文件。我可以理解操作系统在终端/命令提示符下这样做。“Shutdown/f/s”调用Shutdown程序,传递参数,然后执行 在我的根Galaxy S4上浏览我的系统应用程序时,我看到了官方相机应用程序使用的几个程序。其中一个被称为最佳面孔。为什么这是分开的,而不仅仅是在main camera.apk中 还有更好的理由吗?我对编程比较陌生,还没有开始阅读设计模式,所以可能我问这个问题太早了 我可以看到一些好

为什么大程序被分成小程序

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

在我的根Galaxy S4上浏览我的系统应用程序时,我看到了官方相机应用程序使用的几个程序。其中一个被称为最佳面孔。为什么这是分开的,而不仅仅是在main camera.apk中

还有更好的理由吗?我对编程比较陌生,还没有开始阅读设计模式,所以可能我问这个问题太早了

我可以看到一些好处,比如RAM的使用;只在你需要的时候才使用它。 我还可以看到这是一个更好地修补bug和提高可读性的原因,但是像C++一样,头文件也提供了这个好处。p>
<>我已经查过了,唯一的答案是我能找到解决方案,把一个程序分解成独立的文件,比如C++中的头文件。p> 好吧,有几个原因,其中一些是你自己已经弄明白的,比如记忆

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

你不想仅仅因为有人在系统的一小部分引入了bug就破坏整个系统。就像把所有的鸡蛋放在同一个地方

还考虑了许多程序/系统是由不同的团队开发的,这些项目在不同的时间开始/停止。 有时,您的应用程序具有并行开发源代码分支,因为由于上市时间的关系,下一个软件版本无法等待上一个版本的启动

如果它们很小,并且是独立的,有一个定义良好的函数,那么它们可以结合起来解决更复杂的问题。(请参阅关于UNIX工具的《实用程序员:从熟练工到大师》一书)


您可能还想扩展一些程序功能,所以您仍然具有插件功能。。。在一个整体的东西中,你会如何做到这一点呢?

好吧,有几个原因,其中一些你自己已经弄明白了,比如记忆

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

你不想仅仅因为有人在系统的一小部分引入了bug就破坏整个系统。就像把所有的鸡蛋放在同一个地方

还考虑了许多程序/系统是由不同的团队开发的,这些项目在不同的时间开始/停止。 有时,您的应用程序具有并行开发源代码分支,因为由于上市时间的关系,下一个软件版本无法等待上一个版本的启动

如果它们很小,并且是独立的,有一个定义良好的函数,那么它们可以结合起来解决更复杂的问题。(请参阅关于UNIX工具的《实用程序员:从熟练工到大师》一书)


您可能还想扩展一些程序功能,所以您仍然具有插件功能。。。在一个整体式的东西中,您将如何做到这一点?

这是解决特定问题的解决方案。以下是几个例子:

  • 根据设计,您的应用程序必须是分布式的,因为它需要在多台通过网络进行通信的计算机上运行(例如,客户端/服务器应用程序)。因此,您需要在不同的计算机上运行几个不同的进程。但是,这并不意味着您的计算机不能承载多个这样的进程。关键在于,通过设计,您只需要分离应用程序的不同部分,这样每个部分都可以在任何地方运行,只要可以访问(通过网络或IPC)。示例:调试器、启动编译器的IDE、客户机/服务器应用程序(如一些单独在本地运行服务器的游戏)、C/C++编译器(通常为每个要同时编译的编译单元自动分叉)等

  • 您需要隔离每个不同流程的故障。如果一个进程失败,您可能无法从进程本身采取任何措施来尝试修复它或以任何方式管理失败。因此,您需要一个单独的进程来“监视”另一个进程。如果一个进程死亡,它不会杀死其他进程。例如,Chrome(互联网浏览器)就是这样设计的:每个选项卡都是一个过程。这样,如果在执行网页时出现问题,整个选项卡甚至可能崩溃,它不会像以前在其他浏览器上所做的那样(此后采用了类似的策略)一次杀死所有选项卡。基本上是沙箱。另见:

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


  • 这是解决特定问题的解决方案。以下是几个例子:

  • 根据设计,您的应用程序必须是分布式的,因为它需要在多台通过网络进行通信的计算机上运行(例如,客户端/服务器应用程序)。因此,您需要在不同的计算机上运行几个不同的进程。但是,这并不意味着您的计算机不能承载多个这样的进程。关键在于,通过设计,您只需要分离应用程序的不同部分,这样每个部分都可以在任何地方运行,只要可以访问(通过网络或IPC)。示例:调试器、启动编译器的IDE、客户机/服务器应用程序(如一些运行se的游戏)