服务和进程有什么区别

[转]服务和进程有什么区别  

Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出。 任何的用户消息通常都是记录在Windows 事件日志里。Windows Service可以在操作系统启动的时候开始,一直在后台运行,当有需要时也可以手动启动,我们可以通过管理工具里面的服务进行统一管理。当系统启动完毕后,Windows服务并不需要通过登陆页面后才能启动,而我们启动一般的exe文件却要先登陆Windows后才能启动它。

Windows Service 是一种可随 Windows 操作系统启动而启动的,在后台运行的,通常不和用户产生交互的程序。它无法通过双击来运行,类似于 Unix 守护进程(daemon processes),当用户注销时它也不会停止。
Windows 服务由三部分组成:1.一个服务可执行文件;2.一个服务控制程序(SCP);3.服务控制管理器(SCM),负责在 HKLM\SYSTEM\CurrentControlSet\Services 下创建服务键值。用户可通过 SCP 控制服务的启动、停止、暂停等,SCP 会通过 SCM 调用服务程序。
Window 标准的exe可执行程序通常有一个用户界面,Console或GUI,通常由用户来启动或停止 
Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,想比标准的EXE程序,Windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用 。自动方式的时候,windows服务将在OS启动后自动启动运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户,而windows服务则默认使用System用户,这在对系统资源访问的时候特别需要注意。 
Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响? 
32 位Windows上单个进程所能访问的最大内存量是4G,单由于操作系统需要给系统核心分配2G的空间,所以一般用户程序的进程可使用的最大内存为2G。
不一定一样,32位的操作系统的进程可访问的最大内存量是4G,这4G包含了虚拟内存,而一个进程可访问的最大内存量也是4G,所以进程内存访问量在物理内存大于等于4G的时候跟虚拟内存无关,而当物理内存小于4G时,进程访问的内存量随着虚拟内存的增加而增加,直到4G 
Windows使用一个系统:虚拟寻址系统。该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全有Windows后台管理,其实际结 果是32位处理器上的每个进程都可以使用4GB的内存------无论计算机上有多少硬盘空间(在64位处理器上这个数值会更大)。这个4GB内存实际上 包含了程序的所有部分------包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。这个4GB内存称为虚拟地址空间,或虚拟 内存。
EXE和DLL之间的区别是什么?
EXE就是可执行文件,你可要双击它, 它就可以运行,而DLL是一个动态链接库文件,就是说,它不可以自己运行,它是须要一个程序的其它功能运行的时候,它才能运行,打个比方,如果你的QQ要升级,那QQ里面有关升级的DLL文件它就会运行. 
EXE是带有程序入口(Main)的能被终端用户直接执行的应用程序,随着它的启动系统会产生一个相应的进程。
DLL是动态链接库,不包含程序执行入口,不能被终端用户直接执行,本身需要附加到现有的进程中才可以运行。
但两者都是基于PE格式,运行时由磁盘中的映像载入被调用者的内存或者共享空间中执行,包含程序的数据信息,只是EXE还包括程序的代码信息。
DLL可被多个程序共用,而EXE则不行,只能单独执行。

当系统启动完毕后,Windows服务并不需要通过登陆页面后才能启动,而我们启动一般的exe文件却要先登陆Windows后才能启动它。

Windows Service 是一种可随 Windows 操作系统启动而启动的,在后台运行的,通常不和用户产生交互的程序。它无法通过双击来运行,类似于 Unix 守护进程(daemon processes),当用户注销时它也不会停止。
Windows 服务由三部分组成:1.一个服务可执行文件;2.一个服务控制程序(SCP);3.服务控制管理器(SCM),负责在 HKLM\SYSTEM\CurrentControlSet\Services 下创建服务键值。用户可通过 SCP 控制服务的启动、停止、暂停等,SCP 会通过 SCM 调用服务程序。
Window 标准的exe可执行程序通常有一个用户界面,Console或GUI,通常由用户来启动或停止 
Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,想比标准的EXE程序,Windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用 。自动方式的时候,windows服务将在OS启动后自动启动运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户,而windows服务则默认使用System用户,这在对系统资源访问的时候特别需要注意。 
Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响? 
32 位Windows上单个进程所能访问的最大内存量是4G,单由于操作系统需要给系统核心分配2G的空间,所以一般用户程序的进程可使用的最大内存为2G。
不一定一样,32位的操作系统的进程可访问的最大内存量是4G,这4G包含了虚拟内存,而一个进程可访问的最大内存量也是4G,所以进程内存访问量在物理内存大于等于4G的时候跟虚拟内存无关,而当物理内存小于4G时,进程访问的内存量随着虚拟内存的增加而增加,直到4G 
Windows使用一个系统:虚拟寻址系统。该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全有Windows后台管理,其实际结 果是32位处理器上的每个进程都可以使用4GB的内存------无论计算机上有多少硬盘空间(在64位处理器上这个数值会更大)。这个4GB内存实际上 包含了程序的所有部分------包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。这个4GB内存称为虚拟地址空间,或虚拟 内存。
EXE和DLL之间的区别是什么?
EXE就是可执行文件,你可要双击它, 它就可以运行,而DLL是一个动态链接库文件,就是说,它不可以自己运行,它是须要一个程序的其它功能运行的时候,它才能运行,打个比方,如果你的QQ要升级,那QQ里面有关升级的DLL文件它就会运行. 
EXE是带有程序入口(Main)的能被终端用户直接执行的应用程序,随着它的启动系统会产生一个相应的进程。
DLL是动态链接库,不包含程序执行入口,不能被终端用户直接执行,本身需要附加到现有的进程中才可以运行。
但两者都是基于PE格式,运行时由磁盘中的映像载入被调用者的内存或者共享空间中执行,包含程序的数据信息,只是EXE还包括程序的代码信息。
DLL可被多个程序共用,而EXE则不行,只能单独执行。
<think>好的,我现在需要解释线程进程区别。首先,我应该回忆一下操作系统中的基本概念,确保自己理解正确。 进程是操作系统分配资源的基本单位,每个进程都有独立的内存空间。线程是进程内的执行单元,共享同一进程的资源。那它们的区别主要在于资源分配、通信方式、切换开销等方面。 用户可能已经知道一些基础,但需要清晰对比。我应该用通俗易懂的例子来说明,比如进程像公司,线程像部门。公司间独立,部门共享公司资源。这样比较形象。 另外,需要注意技术细节的准确性,比如内存空间、上下文切换的开销,以及多线程编程中的问题,如同步机制。可能还需要提到多核CPU下的并行执行情况。 用户可能还会想知道为什么使用线程,比如提高效率、资源共享的优势,但同时带来的复杂性,比如死锁。需要平衡优缺点。 需要检查是否有遗漏的重要区别点,比如创建销毁的开销,线程更轻量级。进程间通信需要IPC,而线程可以直接读写同一进程的数据。 最后,用表格或总结的方式呈现,帮助用户一目了然。确保语言简洁,避免术语过多,必要时举例说明。</think>以下是线程进程的对比说明(附生活化比喻🌰): --- ### 核心区别对比表 | **对比维度** | **进程** | **线程** | |--------------------|-------------------------------------|-------------------------------------| | **资源占用** | 独立内存空间(默认不共享) | 共享所属进程内存 | | **创建开销** | 大(需分配独立资源) | 小(复用进程资源) | | **切换成本** | 高(涉及内存切换) | 低(仅CPU上下文切换) | | **通信方式** | 复杂(需IPC:管道、Socket等) | 简单(直接读写共享变量) | | **可靠性** | 进程崩溃不影响其他进程 | 线程崩溃会导致整个进程终止 | | **并行性** | 多核CPU可并行不同进程 | 多核CPU可并行同一进程的不同线程 | --- ### 🌰 生活化比喻 **进程**就像一家独立公司: - 拥有自己的办公室(内存空间) - 需要工商注册(系统分配资源) - 公司间交流需正式协议(IPC通信) **线程**就像公司里的部门: - 共享办公场地(共享进程内存) - 部门间沟通只需内部电话(直接访问变量) - 一个部门着火(线程崩溃)会烧毁整个公司(进程终止) --- ### 技术细节说明 1. **内存隔离性** - 进程:拥有独立虚拟地址空间(通过页表隔离) - 线程:共享代码段/堆/全局变量,仅有独立栈空间 ```java // 进程间内存隔离示例(伪代码) Process A: int x = 100; // 地址0x1234 Process B: int x = 200; // 同样地址0x1234(实际物理地址不同) // 线程共享内存示例 Thread1: sharedList.add("A"); Thread2: sharedList.get(0); // 直接访问同一内存区域 ``` 2. **上下文切换开销对比** - 进程切换:需保存/恢复页表、寄存器、文件描述符等(约1-10μs) - 线程切换:仅需保存寄存器(约0.1-1μs) 3. **现代应用场景** - **浏览器**:每个标签页作为独立进程(防止崩溃传染),页面渲染使用多线程 - **游戏开发**:主线程处理渲染,物理线程计算碰撞,网络线程处理通信 --- ### 开发选择建议(何时用哪种) ✅ **优先使用线程**的场景: - 需要频繁共享数据(如缓存系统) - 要求快速响应(如GUI界面线程) - 处理IO密集型任务(如Web服务器) ✅ **必须用进程**的场景: - 需要高隔离性(如安全沙箱) - 运行第三方不可信代码 - 利用多核计算资源(如科学计算) --- **扩展知识**: 现代操作系统实际采用 **轻量级进程(LWP)** 实现线程(如Linux的pthread),而Java线程是**用户级线程与内核级线程的1:1映射**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值