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

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


当前回答

同一进程中的线程共享内存,但每个线程都有自己的堆栈和寄存器,线程在堆中存储线程特定的数据。线程从不独立执行,因此与进程间通信相比,线程间通信要快得多。

进程从不共享相同的内存。当子进程创建时,它会复制父进程的内存位置。进程通信通过使用管道、共享内存和消息解析来完成。线程之间的上下文切换非常缓慢。

其他回答

进程和线程的真实示例这将为您提供有关线程和进程的基本信息

我从Scott Langham的回答中借用了上述信息-谢谢

试图回答这个与Java世界相关的问题。

进程是程序的执行,而线程是进程中的单个执行序列。一个进程可以包含多个线程。线程有时被称为轻量级进程。

例如:

示例1:JVM在单个进程中运行,JVM中的线程共享属于该进程的堆。这就是为什么多个线程可以访问同一个对象。线程共享堆并拥有自己的堆栈空间。这就是一个线程对方法及其局部变量的调用如何保持与其他线程的线程安全。但是堆不是线程安全的,必须同步以确保线程安全。

示例2:程序可能无法通过读取击键来绘制图片。该程序必须充分关注键盘输入,而缺乏一次处理多个事件的能力将导致麻烦。这个问题的理想解决方案是同时无缝执行程序的两个或多个部分。线程允许我们这样做。在这里,画图是一个过程,而读取击键是子过程(线程)。

流程:

过程是一个沉重的过程。进程是一个单独的程序,具有单独的内存、数据、资源等。进程是使用fork()方法创建的。进程之间的上下文切换非常耗时。

例子:比如,打开任何浏览器(mozilla、Chrome、IE)。此时,新流程将开始执行。

线程:

线程是轻量级进程。线程被捆绑在进程内部。线程具有共享内存、数据、资源、文件等。线程是使用clone()方法创建的。线程之间的上下文切换不像Process那样耗时。

进程是代码、内存、数据和其他资源的集合。线程是在进程范围内执行的一系列代码。您可以(通常)在同一进程中同时执行多个线程。

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

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