【发布时间】:2011-03-03 19:57:45
【问题描述】:
线程/进程/任务有什么区别?
【问题讨论】:
标签: process task terminology
线程/进程/任务有什么区别?
【问题讨论】:
标签: process task terminology
Wikipedia 总结得很好:
线程与进程的比较
线程与传统的多任务操作系统进程的不同之处在于:
Windows NT 和 OS/2 等系统据说具有“廉价”线程和“昂贵”进程;在其他操作系统中,除了地址空间切换的成本(这意味着 TLB 刷新)之外,没有太大的区别。
任务和流程是同义词。
【讨论】:
简答:
线程是一个调度概念,它是 CPU 实际“运行”的内容(您不运行进程)。一个进程至少需要一个 CPU/OS 执行的线程。
流程是数据组织的概念。为进程分配资源(例如用于保存状态的内存、允许的地址空间等)。
【讨论】:
进程是正在执行的计算机程序的一个实例。 它包含程序代码及其当前活动。 根据操作系统 (OS),一个进程可能由同时执行指令的多个执行线程组成。 基于进程的多任务处理使您能够在使用文本编辑器的同时运行 Java 编译器。 在使用单个 CPU 的多个进程时,使用了各种内存上下文之间的上下文切换。 每个进程都有一套完整的自己的变量。
线程是 CPU 利用率的基本单位,由程序计数器、堆栈和一组寄存器组成。 执行线程由计算机程序的一个分支产生两个或多个同时运行的任务。 线程和进程的实现因操作系统而异,但在大多数情况下,线程包含在进程中。多个线程可以存在于同一个进程中并共享内存等资源,而不同的进程不共享这些资源。 同一进程中的线程示例是自动拼写检查和写入时自动保存文件。 线程基本上是在相同内存上下文中运行的进程。 线程可以在执行时共享相同的数据。 Thread Diagram i.e. single thread vs multiple threads
任务是加载到内存中的一组程序指令。
【讨论】:
来自wiki的清晰解释
1:1(内核级线程)
用户创建的线程与内核中的可调度实体一一对应。[3]这是最简单的线程实现。 Win32 从一开始就使用了这种方法。在 Linux 上,通常的 C 库实现了这种方法(通过 NPTL 或更旧的 LinuxThreads)。 Solaris、NetBSD 和 FreeBSD 使用相同的方法。
N:1(用户级线程)
N:1 模型意味着所有应用程序级线程都映射到单个内核级调度实体;[3] 内核不知道应用程序线程。使用这种方法,上下文切换可以非常快速地完成,此外,它甚至可以在不支持线程的简单内核上实现。然而,主要缺点之一是它无法从多线程处理器或多处理器计算机上的硬件加速中受益:同时调度的线程永远不会超过一个。 [3]例如:如果其中一个线程需要执行一个I/O请求,则整个进程被阻塞,线程优势无法发挥。 GNU 可移植线程使用用户级线程,状态线程也是如此。
M:N(混合线程)
M:N 将 M 数量的应用程序线程映射到 N 数量的内核实体,[3] 或“虚拟处理器”。这是内核级(“1:1”)和用户级(“N:1”)线程之间的折衷。一般来说,“M:N”线程系统比内核或用户线程更复杂,因为需要更改内核和用户空间代码。在 M:N 实现中,线程库负责在可用的可调度实体上调度用户线程;这使得线程的上下文切换非常快,因为它避免了系统调用。然而,这增加了复杂性和优先级反转的可能性,以及在用户空间调度程序和内核调度程序之间没有广泛(且昂贵)协调的情况下的次优调度。
【讨论】:
用更简单的术语解释
进程:进程是一组指令即代码,对相关数据进行操作,进程有自己的各种状态,睡眠、运行、停止等。当程序加载到内存中时,它就成为进程。每个进程在分配 CPU 时至少有一个线程,称为单线程程序。
线程:线程是进程的一部分。多个线程可以作为进程的一部分存在。线程有自己的程序区和内存区。一个进程内的多个线程不能互相访问数据。进程必须处理线程的同步以实现所需的行为。
任务:任务不是世界范围内广泛使用的概念。当程序指令被加载到内存中时,人们会调用进程或任务。如今,任务和流程是同义词。
【讨论】:
process 调用或启动程序。它是一个程序实例,可以是多个并运行相同的应用程序。 thread 是进程中的最小执行单元。一个进程可以运行多个线程。线程的执行导致任务。因此,在多线程环境中,会发生多线程。
正在执行的program 称为process。一个程序可以有任意数量的进程。每个进程都有自己的地址空间。
线程使用进程的地址空间。线程和进程的区别在于,当 CPU 从一个进程切换到另一个进程时,需要将当前信息保存在 Process Descriptor 中并加载新进程的信息。从一个线程切换到另一个线程很简单。
task 只是加载到内存中的一组指令。线程本身可以将自己拆分为两个或多个同时运行的任务。
更多了解参考链接:http://www.careerride.com/os-thread-process-and-task.aspx
【讨论】:
至少,流程或任务需要以下内容:
在成员线程之间共享
1.代码或固件,说明 这些在内存中并且有地址 2.代码正在操作的数据 数据从内存开始,可以移动到寄存器中。数据有地址
每个线程专有
3.CPU和相关的物理寄存器 4.一个栈 5.状态信息 进程(任务)与线程
【讨论】: