Process 线程/进程/任务之间有什么区别?
线程/进程/任务之间的区别是什么?很好地概括了这一点: 线程与进程的比较 线程与传统多任务操作系统进程的不同之处在于:Process 线程/进程/任务之间有什么区别?,process,task,terminology,Process,Task,Terminology,线程/进程/任务之间的区别是什么?很好地概括了这一点: 线程与进程的比较 线程与传统多任务操作系统进程的不同之处在于: 进程通常是独立的,而线程作为 过程的子集 进程携带大量的状态信息,而 进程共享状态中的线程 以及内存和其他资源 进程有单独的地址空间,而线程共享它们的地址空间 地址空间 流程仅通过系统提供的流程间交互 沟通机制 同一进程中的线程之间的上下文切换是无效的 通常比上下文更快 在进程之间切换 Windows NT和OS/2等系统据说有“便宜”的线程和“昂贵”的进程;在其他操作系统
- 进程通常是独立的,而线程作为 过程的子集
- 进程携带大量的状态信息,而 进程共享状态中的线程 以及内存和其他资源
- 进程有单独的地址空间,而线程共享它们的地址空间 地址空间
- 流程仅通过系统提供的流程间交互 沟通机制
- 同一进程中的线程之间的上下文切换是无效的 通常比上下文更快 在进程之间切换
任务是加载到内存中的一组程序指令。来自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实现中,线程库负责在可用的可调度实体上调度用户线程;这使得线程的上下文切换非常快,因为它避免了系统调用。然而,这增加了复杂性和优先级反转的可能性,以及在userland调度器和内核调度器之间没有广泛(且昂贵)协调的情况下出现次优调度。用更简单的术语解释 进程:进程是一组指令,作为对相关数据进行操作的代码,进程有自己的各种状态,如休眠、运行、停止等。当程序加载到内存中时,它就成为进程。分配CPU时,每个进程至少有一个线程,称为sigled threaded program
线程:线程是进程的一部分。进程中可以存在多个线程。线程有自己的程序区和内存区。一个进程内的多个线程无法访问彼此的数据。进程必须处理线程的同步化以实现理想的行为
任务:任务在世界范围内没有广泛使用。当程序指令加载到内存中时,人们会将其称为进程或任务。任务和过程现在是同义词。过程调用或启动程序。它是一个程序的实例,可以是多个并运行同一个应用程序。线程是进程中最小的执行单元。职业选手