一个程序可以有多个进程吗?

Posted

技术标签:

【中文标题】一个程序可以有多个进程吗?【英文标题】:Can one program have multiple processes? 【发布时间】:2011-09-01 22:27:56 【问题描述】:

在阅读和搜索操作系统、进程和线程之后,我查看了 wiki,它说,

计算机程序是被动的 指令的集合,一个过程 是那些的实际执行 指示。可能有几个过程 与同一程序相关联;为了 例如,打开几个实例 同一个程序通常意味着更多 不止一个进程正在执行。

现在一个程序是否有可能拥有多个进程,我不包括运行同一程序的多个实例的可能性。我的意思是一个程序的一个实例正在运行,一个程序是否可能有多个进程? 如果是,如何?如果没有,为什么不呢?

我是这方面的新手,但该死的好奇:) 感谢您的所有帮助..

【问题讨论】:

从一个程序实例创建多个进程实际上非常简单。请参阅 C 语言中的 fork() 函数。 【参考方案1】:

是的,很明显 - 您可以运行大多数程序的两个或更多副本 - 我通常运行大约 5 个 vim 副本,每个副本都是一个单独的进程。至于操作系统如何加载可执行文件,创建一个进程,然后告诉该进程开始执行文件内容。

【讨论】:

我在上面提到过,我不包括您想要运行多个程序实例的情况。我的意思是程序的一个实例可以在多个进程中运行吗? 我在这里有点困惑。对不起,如果我在这里错了,但我需要清楚地理解我正在阅读的内容,因此问题......好吧,让我改写一下,如果我正在运行,可以说 firefox,它有两个选项卡,firefox 是否在一个进程中运行并且两个选项卡被创建为一个单独的进程并且它们正在与firefox进程通信,并且在内部每个进程都有自己的线程,或者一个完整的firefox进程正在运行并且两个选项卡都在单独的线程中运行......? 一个进程,可能(也可能不是)两个线程。如果您使用的是 Windows,则可以使用进程资源管理器(或 linux 上的 ps)之类的工具来查看到底发生了什么。 是的,由程序员决定一个进程应该产生子进程(或线程)。 @mayjune:在 firefox 示例中,当您打开多个选项卡时,不会创建多个 firefox 进程,但如果是 google chrome,当您打开多个选项卡时,会创建多个进程。所以它取决于你使用的程序是产生一个线程还是创建一个新进程。您不能在 Windows 上创建 2 个 VLC 播放器实例,但可以在 Linux 上创建。所以这取决于程序员他是如何实际制作程序的【参考方案2】:

这绝对是可能的,但桌面应用程序可能不是一个很好的例子,我认为这是你困惑的根源。

考虑使用网络服务器(nginx 或 Apache)。有一个主进程和多个工作进程在工作。可以说,主进程“接受”工作,并将其委托给工作人员。 NginX 和 Apache 都可以配置为任意数量的工作进程。

在我们公司,我们的业务是提供 SaaS,帮助企业通过其网站与访问者进行在线聊天。我们系统的后端部分有多个“服务”相互通信以完成任务。每个服务都有多个正在运行的实例。

【讨论】:

但是那些是多进程还是多线程? @user1 在这个特定的示例(我们赢得的系统)中,它是多个进程,每个进程都是单线程的。单进程多线程(而不是多个单线程进程)和多进程,每个多线程都可以做同样的事情。 @user1 在我最新的公司中,我们有一个庞大的微服务应用程序。有些服务只有一个实例在运行,但该实例是多​​线程的(Akka、ZIO 或猫效应。我们拥有它们,有时是组合的),有些服务有两个实例在运行(每个实例都是多线程的)。此外,我们在一些服务中的一些功能必须是单例的,因此我们采取措施确保正在运行的服务的多个实例中只有一个实例通过 zookeeper 领导者承担执行该特定功能的角色选举机制。希望这会有所帮助。

以上是关于一个程序可以有多个进程吗?的主要内容,如果未能解决你的问题,请参考以下文章

多个进程可以共享一个 CUDA 上下文吗?

单个服务器进程可以监听多个端口吗?

同一进程中是不是可以有多个 ORB 对象?

pthread多线程是指同时运行多个程序吗?

我可以从多个进程/线程写入 HDF5 文件吗?

浏览器页面关闭后台线程会中断吗