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

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


当前回答

我从知识探索中复制了这些信息!博客:

流程:程序的执行实例称为进程。一些操作系统使用术语“任务”来指代正在执行的程序。进程总是存储在也称为主存储器或随机存取存储器的主存储器中。因此,流程被称为活动实体。如果重新启动机器,它将消失。多个进程可以与同一程序相关联。在多处理器系统上,可以并行执行多个进程。在单处理器系统上,虽然无法实现真正的并行性,但应用了进程调度算法,处理器计划每次执行一个过程,产生一种错觉并发性。示例:执行“计算器”程序的多个实例。每个实例都称为一个过程。线程:线程是进程的子集。它被称为“轻量级进程”,因为它类似于真实进程,但在进程的上下文中执行并共享内核分配给进程的相同资源。通常,一个进程只有一个控制线程——一次执行一组机器指令。进程也可以由并发执行指令的多个执行线程组成。多个控制线程可以利用多处理器系统上可能的真正并行性。在单处理器系统上,应用线程调度算法,并调度处理器每次运行一个线程。进程中运行的所有线程共享相同的地址空间、文件描述符、堆栈和其他与进程相关的属性。由于进程的线程共享相同的内存,同步进程内共享数据的访问将获得前所未有的效果重要性

其他回答

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

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

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

以下是我从代码项目的一篇文章中得到的内容。我想它清楚地解释了所需的一切。

线程是另一种将工作负载拆分为单独的执行流。线程的重量比进程轻。这这意味着,它提供的灵活性不如全面流程,但可以启动速度更快,因为操作系统设置当程序由两个或多个线程组成时线程共享单个内存空间。进程被赋予单独的地址空间。所有线程共享一个堆。但每个线程都有自己的堆栈。

应用程序由一个或多个进程组成。简单地说,进程是一个正在执行的程序。一个或多个线程在进程上下文中运行。线程是操作系统分配处理器时间的基本单元。一个线程可以执行过程代码的任何部分,包括当前由另一个线程执行的部分。光纤是必须由应用程序手动调度的执行单元。纤维在调度它们的线程的上下文中运行。

从这里偷来的。

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

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

它们几乎一样。。。但关键的区别在于线程是轻量级的,而进程在上下文切换、工作负载等方面是重量级的。

线程是一个子进程,它们共享一个进程内的代码、数据和文件等公共资源。然而,两个进程无法共享资源(例外情况是,如果一个进程(父进程)分叉为另一个进程,则默认情况下,它们可以共享资源。),对CPU的资源要求较高的负载,而线程在此上下文中要轻得多。虽然两者都有相同的功能。场景中,考虑一个单线程进程由于I/o而被阻塞,那么整个1将进入等待状态,但当多线程进程被I/o阻塞时,其唯一的1个I/o相关线程将被阻塞。