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

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


当前回答

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

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

其他回答

流程:

进程基本上是一个正在执行的程序。它是一个活跃的实体。一些操作系统使用术语“任务”来指代正在执行的程序。进程总是存储在也称为主存储器或随机存取存储器的主存储器中。因此,流程被称为活动实体。如果重新启动机器,它将消失。多个进程可以与同一程序相关联。在多处理器系统上,可以并行执行多个进程。在单处理器系统上,虽然没有实现真正的并行性,但应用了进程调度算法,处理器被调度为每次执行一个进程,从而产生并发的错觉。示例:执行“计算器”程序的多个实例。每个实例都称为一个过程。

线程:

线程是进程的子集。它被称为“轻量级进程”,因为它类似于真实进程,但在进程的上下文中执行,并共享内核分配给进程的相同资源。通常,一个进程只有一个控制线程——一次执行一组机器指令。进程也可以由并发执行指令的多个执行线程组成。多个控制线程可以利用多处理器系统上可能的真正并行性。在单处理器系统上,应用线程调度算法,并调度处理器每次运行一个线程。进程中运行的所有线程共享相同的地址空间、文件描述符、堆栈和其他与进程相关的属性。由于进程的线程共享相同的内存,因此在进程内同步对共享数据的访问变得空前重要。

参考-https://practice.geeksforgeeks.org/problems/difference-between-process-and-thread

我认为理解差异的最简单方法是可视化线程和进程如何执行它们的任务。


线程在共享内存空间(创建它们的进程)中并行运行:

Thread 1              Thread 2              Thread 3
   | 
   | 
   |
                         |
                         |
                                               |
                                               |
                                               |
   |
                         |
                         | 
                         |            
Complete             Complete              Complete

注意:以上可以解释为一个进程(即一个进程有3个线程)


进程并行并行运行:

Process 1              Process 2              Process 3
    |                      |                      |
    |                      |                      |
    |                      |                      |
    |                      |                      |
    |                      |                      |
    |                      |                      |
Complete               Complete               Complete

进程和线程之间的差异如下:

进程是程序的执行实例,而线程是进程的最小单元。进程可以划分为多个线程,而线程不能划分。进程可以被认为是一个任务,而线程可以被看作是一个轻量级的任务。进程分配单独的内存空间,而线程分配共享内存空间。进程由操作系统维护,而线程由程序员维护。

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

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

线程和进程都是OS资源分配的原子单元(即,有一个并发模型描述了CPU时间如何在它们之间分配,以及拥有其他OS资源的模型)。不同之处在于:

共享资源(根据定义,线程共享内存,除了堆栈和本地变量之外,它们不拥有任何东西;进程也可以共享内存,但这有一个单独的机制,由OS维护)分配空间(进程的内核空间与线程的用户空间)

格雷格·休吉尔(Greg Hewgill)对“进程”一词的Erlang含义是正确的,这里讨论了为什么Erlang可以实现轻量级进程。