进程和线程之间的技术区别是什么?

我感觉像“进程”这样的词被过度使用了,而且还有硬件和软件线程。像Erlang这样的语言中的轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?


当前回答

线程和进程之间的区别?

进程是应用程序的执行实例,线程是进程内的执行路径。此外,一个进程可以包含多个线程。需要注意的是,一个线程可以做一个进程所能做的任何事情。但是,由于一个进程可由多个线程组成,因此可以将一个线程视为“轻量级”进程。因此,线程和进程之间的本质区别在于每个线程用来完成的工作。线程用于小型任务,而进程用于更“重量级”的任务——基本上是应用程序的执行。

线程和进程之间的另一个区别是,同一进程中的线程共享相同的地址空间,而不同的进程不共享。这允许线程读取和写入相同的数据结构和变量,也方便了线程之间的通信。进程之间的通信(也称为IPC或进程间通信)非常困难,而且资源密集。

这里总结了线程和进程之间的区别:

线程比进程更容易创建,因为它们不需要单独的地址空间。多线程需要仔细编程,因为线程共享只能由一个线程修改的数据结构一次。与线程不同,进程不共享相同的地址空间。线程被认为是轻量级的,因为它们使用资源少于流程。流程彼此独立。线程,因为它们共享同一地址空间是相互依赖的,因此请谨慎必须采取措施,以使不同的线程不会相互踩踏。这真的是另一种方式来说明上面的#2。一个进程可以由多个线程组成。

其他回答

我已经仔细阅读了几乎所有的答案,唉,作为一名正在修OS课程的本科生,我目前还不能完全理解这两个概念。我的意思是,大多数人都从一些操作系统书籍中读到了不同之处,即线程能够访问事务单元中的全局变量,因为它们利用了进程的地址空间。然而,新的问题出现了,为什么会有进程,我们已经知道线程相对于进程更轻。让我们通过使用从先前答案之一中摘录的图像来浏览以下示例,

我们有3个线程同时处理一个word文档,例如Libre Office。第一种方法通过下划线检查单词是否拼写错误。第二个从键盘上取下并打印字母。最后一个确实会在短时间内保存文档,以免在出现问题时丢失正在处理的文档。在这种情况下,3个线程不能是3个进程,因为它们共享一个公共内存,该内存是它们进程的地址空间,因此所有线程都可以访问正在编辑的文档。因此,道路是文字文档,还有两台推土机,它们是线索,尽管其中一台在图像中缺失。

线程在共享内存空间中运行,但进程在单独的内存空间中线程是一个轻量级进程,但进程是一个重量级进程。线程是进程的一个子类型。

过程-正在执行的程序

线程-线程是执行最小的编程指令序列

例如,如果你想计算矩阵乘法,你将为main中的循环编写一个3的程序并执行它。现在这是你的过程。

现在,您可以通过创建线程并分配每个线程执行行的结果来解决相同的程序。每个线程将独立工作,结果将存储在数组中。因为线程在进程中共享相同的内存。

在这两种情况下,结果相同。

基本上,线程是进程的一部分,如果没有进程线程就无法工作。线程是轻量级的,而进程是重量级的。进程之间的通信需要一些时间,而线程需要更少的时间。线程可以共享同一个内存区域,而进程则单独存在。

进程和线程都是独立的执行序列。典型的区别是(同一进程的)线程在共享内存空间中运行,而进程在单独的内存空间中。

我不确定你可能指的是什么“硬件”线程和“软件”线程。线程是一种操作环境特性,而不是CPU特性(尽管CPU通常具有使线程高效的操作)。

Erlang使用术语“进程”,因为它不公开共享内存多道程序模型。称它们为“线程”意味着它们共享内存。