Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Process 线程/进程/任务之间有什么区别?_Process_Task_Terminology - Fatal编程技术网

Process 线程/进程/任务之间有什么区别?

Process 线程/进程/任务之间有什么区别?,process,task,terminology,Process,Task,Terminology,线程/进程/任务之间的区别是什么?很好地概括了这一点: 线程与进程的比较 线程与传统多任务操作系统进程的不同之处在于: 进程通常是独立的,而线程作为 过程的子集 进程携带大量的状态信息,而 进程共享状态中的线程 以及内存和其他资源 进程有单独的地址空间,而线程共享它们的地址空间 地址空间 流程仅通过系统提供的流程间交互 沟通机制 同一进程中的线程之间的上下文切换是无效的 通常比上下文更快 在进程之间切换 Windows NT和OS/2等系统据说有“便宜”的线程和“昂贵”的进程;在其他操作系统

线程/进程/任务之间的区别是什么?

很好地概括了这一点:

线程与进程的比较

线程与传统多任务操作系统进程的不同之处在于:

  • 进程通常是独立的,而线程作为 过程的子集
  • 进程携带大量的状态信息,而 进程共享状态中的线程 以及内存和其他资源
  • 进程有单独的地址空间,而线程共享它们的地址空间 地址空间
  • 流程仅通过系统提供的流程间交互 沟通机制
  • 同一进程中的线程之间的上下文切换是无效的 通常比上下文更快 在进程之间切换
Windows NT和OS/2等系统据说有“便宜”的线程和“昂贵”的进程;在其他操作系统中,除了意味着TLB刷新的地址空间切换成本外,没有太大的区别

任务和过程是同义的。

简短回答:

线程是一种调度概念,它是CPU实际“运行”的内容(您不运行进程)。一个进程至少需要一个CPU/OS执行的线程

过程是数据组织的概念。为进程分配资源(例如用于保存状态的内存、允许的地址空间等)。

进程: 进程是正在执行的计算机程序的实例。 它包含程序代码及其当前活动。 根据操作系统(OS),进程可能由多个并发执行指令的执行线程组成。 基于进程的多任务处理使您能够在使用文本编辑器的同时运行Java编译器。 在使用单个CPU的多个进程时,使用不同内存上下文之间的上下文切换。 每个过程都有一整套自己的变量

线程: 线程是CPU利用率的基本单位,由一个程序计数器、一个堆栈和一组寄存器组成。 一个执行线程将计算机程序的一个分支执行为两个或多个并发运行的任务。 线程和进程的实现因操作系统而异,但在大多数情况下,线程包含在进程中。多个线程可以存在于同一进程中并共享诸如内存之类的资源,而不同的进程不共享这些资源。 同一进程中的线程示例是自动拼写检查和写入时自动保存文件。 线程基本上是在同一内存上下文中运行的进程。 线程在执行时可能共享相同的数据。

任务:
任务是加载到内存中的一组程序指令。

来自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


线程:线程是进程的一部分。进程中可以存在多个线程。线程有自己的程序区和内存区。一个进程内的多个线程无法访问彼此的数据。进程必须处理线程的同步化以实现理想的行为


任务:任务在世界范围内没有广泛使用。当程序指令加载到内存中时,人们会将其称为进程或任务。任务和过程现在是同义词。

过程调用或启动程序。它是一个程序的实例,可以是多个并运行同一个应用程序。线程是进程中最小的执行单元。职业选手