任何人都可以区分进程和线程。我在网上阅读了很多内容,但其中大多数都令人困惑。
3 回答
请原谅我的类比,但将过程视为身体,将线程视为思想或灵魂。
进程是代表与您的应用程序相关的资源的抽象,例如内存(虚拟、物理等)、安全性和其他与内核相关的属性。
线程是实际执行发生的地方。这是一个过程的生命。事实上,当操作系统被要求运行一个进程时,它首先分配所有进程所需的资源,但是在操作系统首先创建并开始执行进程之前,该进程还没有开始行动或生命。线。
进程最后一个线程停止执行后,进程开始实际死亡,(并清理)。
我故意试图让事情变得不那么干燥。我希望我成功了:)。
进程是由处理器(CPU)执行的东西,并且有自己的资源,例如自己的地址空间。因此,它尽可能与操作系统处理的其他程序隔离开来。
相反,线程是一个“轻量级”进程,它与其他线程共享其资源,特别是其地址空间。这些线程可以使用公共地址空间轻松地相互通信。但由于它们不是相互孤立的,它们可能会以可能很棘手的方式相互影响。
添加:
“轻量级”意味着它需要操作系统的“管理”工作比进程少得多。例如,进程切换需要使用内存管理单元来切换地址空间,这需要相当长的时间。因此,在同一寻址空间中从一个线程切换到另一个线程要快得多。出于同样的原因,与同一寻址空间中的线程之间的通信相比,进程通信需要操作系统做更多的工作。因此,轻量级仅仅意味着线程需要更少的操作系统工作。
我将添加我自己选择的澄清声明:-)
进程是操作系统运行的程序(例如以.exe 结尾的文件)。操作系统将进程分开,以便一个进程与所有其他进程的行为并行运行,独立于所有其他进程的行为并且不受其影响(除非它另有选择)。操作系统不是很完美,所以这并不总是正确的,但这就是想法。
一个进程包含至少一个执行线程,即一个接一个地执行的指令序列。
如果初始线程启动多个线程,则一个进程可以包含多个线程。每个线程与其他线程并行运行其指令序列(或者至少这是操作系统努力实现的目标)。
通常情况下,进程中的线程通过访问共享资源(内存、网络连接等)进行交互。
您使用信号量和互斥锁等对象来确保当线程访问共享资源时,它可以独占使用该资源。其他争夺资源的线程被操作系统暂停,直到它再次可用,此时它们会被恢复。这称为上下文切换。
一个进程可以访问命名共享资源并使用命名信号量/互斥锁以类似的方式与另一个进程交互。不同之处在于操作系统必须上下文切换整个进程而不是整个线程。在大多数操作系统上,这需要更长的时间,因此通常出于效率原因而避免使用。