Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 进程和线程之间有什么区别?_Multithreading_Process_Operating System - Fatal编程技术网

Multithreading 进程和线程之间有什么区别?

Multithreading 进程和线程之间有什么区别?,multithreading,process,operating-system,Multithreading,Process,Operating System,进程和线程之间的技术区别是什么 我感觉像“进程”这样的词被过度使用了,还有硬件和软件线程。像这样的语言中的轻量级进程如何?是否有明确的理由使用一个术语而不是另一个术语?进程和线程都是独立的执行序列。典型的区别是(同一进程的)线程在共享内存空间中运行,而进程在单独的内存空间中运行 我不确定你指的是什么“硬件”线程还是“软件”线程。线程是一种操作环境特性,而不是CPU特性(尽管CPU通常具有使线程高效的操作) Erlang使用术语“进程”,因为它不公开共享内存多道编程模型。将它们称为“线程”意味着它

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


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

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

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

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

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


从中窃取。

线程和进程都是操作系统资源分配的原子单元(即,有一个并发模型描述CPU时间如何在它们之间分配,以及拥有其他操作系统资源的模型)。在以下方面存在差异:

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

上面Greg Hewgill对“进程”一词的Erlang含义的理解是正确的,并且讨论了为什么Erlang可以实现进程的轻量级。

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

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

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


在Microsoft文档中可以在以下位置找到此信息:

Microsoft Windows支持抢占式多任务处理,这会产生同时执行来自多个进程的多个线程的效果。在多处理器计算机上,系统可以同时执行与计算机上处理器数量相同的线程


过程:

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

  • 线程是进程的子集
  • 它被称为“轻量级进程”,因为它类似于真实进程,但在进程上下文中执行,并共享内核分配给进程的相同资源
  • 通常,一个进程只有一个控制线程——一次执行一组机器指令
  • 一个进程也可以由多个并发执行指令的执行线程组成
  • 多线程控制可以利用多处理器系统上可能的真正并行性
  • 在单处理器系统上,应用线程调度算法,处理器被调度为一次运行一个线程
  • 进程内运行的所有线程共享相同的地址空间、文件描述符、堆栈和其他与进程相关的属性
  • 由于进程的线程共享相同的内存,因此同步对进程内共享数据的访问变得前所未有的重要
我借
Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |