协慌网

登录 贡献 社区

进程和线程有什么区别?

进程和线程之间的技术差异是什么?

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

答案

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

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

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

处理
每个进程都提供执行程序所需的资源。进程具有虚拟地址空间,可执行代码,系统对象的打开句柄,安全上下文,唯一进程标识符,环境变量,优先级类,最小和最大工作集大小以及至少一个执行线程。每个进程都使用单个线程启动,通常称为主线程,但可以从其任何线程创建其他线程。

线
线程是进程中可以调度执行的实体。进程的所有线程共享其虚拟地址空间和系统资源。此外,每个线程都维护异常处理程序,调度优先级,线程本地存储,唯一线程标识符以及系统将用于保存线程上下文直到调度的一组结构。线程上下文包括线程的机器寄存器集,内核堆栈,线程环境块和线程进程的地址空间中的用户堆栈。线程也可以有自己的安全上下文,可用于模拟客户端。


在 MSDN 上找到这个:
关于进程和线程

Microsoft Windows 支持抢占式多任务处理,它可以创建从多个进程同时执行多个线程的效果。在多处理器计算机上,系统可以同时执行与计算机上的处理器一样多的线程。

处理:

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

线:

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

我从Knowledge Quest借用了上述信息!博客