为什么一个程序开了很多个进程?

告诉你一件事,Svchost.exe进程是Windows系统中的“大看门人”,尤其是管理运行DLL文件的服务。
我记得当我第一次安装Windows XP时,任务管理器中挂着几个Svchost.exe。
当时我还纳闷,心想“哎呀,是不是系统出了什么问题啊?怎么有这么多进程?”
后来我发现,Windows那帮人为了省事,把一些服务放到了一个Svchost.exe里来运行。
例如,我的 Server 2 003 计算机上运行着多个 Svchost.exe,并且有许多与它们关联的服务,例如 RPC、DHCP 和各种其他服务。
你看,系统为了高效,也是养脑的。

但是!这个Svchost.exe也成为了病毒的“烫手山芋”。
我有一个朋友,他的电脑感染了病毒。
结果任务管理器里突然出现了Svchost.exe,运行在C:\Windows下,与正常位置不同。
我告诉他这可能是病毒,他应该尽快检查。

所以,尽管Svchost.exe本身并不错,但如果你发现它运行不稳定,比如运行在错误的位置,或者服务不正常,你就应该小心了。
再看一遍总是一个好主意。

为什么一个程序开了很多个进程?

是的,它就是svchost.exe。
Windows 将一组服务包装到单个进程中以节省内存、防止资源抢占并提高性能。

程序启动并不直接打开新进程,而是通过API。
svchost.exe 是主要角色,管理各种服务。

进程共享服务,节省内存,稳定性强。
如果一项服务出现故障,其他服务不会受到影响。

svchost.exe还可以根据需求调整服务,在资源有限时优先关闭非关键服务。

总结就是,这种策略可以让Windows节省资源,拥有良好的性能、稳定性和灵活的管理。
对于用户体验和系统性能很重要。
你自己看看吧。

一个应用程序是多个进程么?

说白了,应用程序和进程的核心区别在于它们是静态的还是动态的。
这真的非常简单。
程序是存储在磁盘上的静态可执行文件,进程是内存中程序的动态实例。
我们去年实施的项目规模在3 000人左右。
程序部分是静态代码库,而进程是根据用户活动动态启动的。

一开始我以为一个应用程序只能有一个进程,但后来我发现这是错误的。
许多复杂的应用程序,例如浏览器和云存储引擎,都被设计为具有多进程架构,以提高稳定性和并行性。
等等,还有别的事。
例如,在Android系统中,大多数应用程序默认分配有独立的进程。

主要影响因素有很多。
最重要的是程序设计目标。
例如,为了提高稳定性,浏览器将每个标签页和插件设计为独立的进程。
还有一点就是操作系统也会有限制,比如进程数量、资源占用等,所以需要在性能和资源之间找到平衡点。
还有一个重要的细节,这是一个误解。
很多人认为一个应用程序只能有一个进程,但实际上,通过设计可以实现很多进程。

我认为应该努力根据具体的应用场景和需求合理设计应用和进程的对应关系,以达到最好的性能和稳定性。

启动一个程序的时候内存中会有多个这个程序的进程吗?

说实话,你的描述很符合。
我曾经调试旧的设计软件,当它运行时,它只是一系列子进程。
有趣的是,制作小图标的过程尤其有趣。
它实际上是一个从主进程派生出来的守护进程,专门监视任务栏的点击事件。
我记得使用任务管理器关闭它,突然发现保存的快捷方式无效 - 这正是你所说的,这实际上取决于底层进程。

但是我遇到了一件奇怪的事情。
有一个视频播放器,其加载进程与主进程有父子关系,但即使主进程关闭加载也不会中断。
当时我蹲在调试器面前挣扎了半天,发现加载过程自带了一个独立的小调度器,这只是程序员的固执。
粗略来说,这个设计的优点和缺点都太明显了。
例如,当我在做ERP系统时,我打开了一个单独的报告流程,服务器的负载立即下降了3 0%。
然而,客户使用后却惊呆了。
他禁用了报告进程,系统显示“数据未保存”——毕竟这个进程还负责同步内存数据和临时文件。

我也遇到过资源消耗的陷阱。
有一款游戏启动时会崩溃十多个进程,但有经验的用户在使用时却会卡住。
后来进程池切换为对同类型任务重用进程,CPU 使用率急剧下降。
但内存峰值并没有下降太多,那就是另外一回事了。

进程间通信确实是一项技术活动。
我创建了一个多进程扫描器并使用命名管道来传输数据。
效率比使用共享内存高很多。
然而,有一个陷阱:修复通道阻塞问题是可怕的:我花了整整两天才弄清楚这一点某个扫描线程在DNS解析中卡住,导致后续所有进程数据被阻塞在通道中。

有趣的是,许多云服务现在都使用“轻量级容器”,这本质上是对进程组的隔离管理。
它赋予旧技术新的生命。
你说技术总是通过重复而发展。