工作,任务和流程,有什么区别

时间:2010-06-19 01:13:29

标签: operating-system

这些概念之间有什么区别?

5 个答案:

答案 0 :(得分:25)

“过程”定义明确; “工作”和“任务”含糊不清。

从根本上说,一项工作/任务 工作完成了什么,而一个流程 是如何完成的,通常被拟人化为这样做。作业是一个整体工作单元,并且组成任务。在实践中,使用非常不一致,并且通常是“任务”==“进程”,但正式的过程执行任务。

进程是一个明确定义的操作系统概念,线程process是正在执行的程序的实例,并且是 resources 的基本单元:一个进程包含或“拥有”其映像,执行上下文,内存,文件等;在词源上,过程是由过程完成的步骤。一个进程由一个或多个线程组成,这些线程是调度的单元,由一个进程的某个子集组成(可能与其他线程共享):执行上下文,或许更多。传统上,线程是处理器上 execution 的单元(线程是“正在执行的”),但是对于多核处理器和hardware threads,某些调度甚至在该级别完成一个核心。有各种各样的进程和线程,确切的定义因平台而异。

今天

作业任务是含糊不清的模糊术语,尤其是任务。 “job”通常表示一组进程,而“task”可能表示一个进程,一个线程,一个进程或线程,或者显然是一个工作单元 进程或线程。

想一想命名是多么混乱, Windows Task Manager管理(运行)进程 Windows Task Scheduler计划将来执行程序,传统上称为job scheduler,并使用.job扩展程序!

术语“job”传统上是指“工作”(与“职业”相对),并在制造中用作短语“job production”,意思是“自定义生产“,与batch production(多个项目,一次一步)和flow production(多个项目同时,所有步骤同时,按项目)形成对比。请注意,这些区别在计算中变得模糊,特别是在矛盾的术语“batch job”中。

在计算中,“工作”起源于大型机上的非交互式处理,特别是在20世纪60年代中期的Job Control LanguageDOS/360的IBM OS/360中,正式意味着“ “操作系统的工作单元”,由步骤组成,每个步骤都是执行特定程序的请求。早期的计算机主要执行batch processing(在许多输入数据上运行相同的程序),如人口普查或计费,标准类型的一次性作业正在从源代码编译程序,这可能是然后处理批次数据。后来批次开始应用于所有非交互式计算,无论是一次性还是多项。

在Unix shell中,“job”是shell process group的表示 - 一组可以发送信号的进程 - 具体地说是一个管道及其后代进程;请注意,运行脚本会启动作业,就像在大型机中一样。在进程完成之前不会完成作业,并且可以停止,恢复或终止作业,这对应于暂停,恢复或终止进程。因此,当正式工作与流程组不同时,这是一个微妙的区别,因此人们经常使用“工作”来表示“一组流程”。

传统工作(和批次)具有有限的输入数据,应该成功或不成功完成处理。相反,当运行诸如web服务器之类的服务器时,诸如请求流之类的输入是无限的(正式编码)。这类似于流程生产,并且过程(或“作业”)永远不会完成,尽管它可以被终止或“取消”。在一个quip中,“服务器的工作永远不会完成”(正式地,退出状态将被取消,而不是已完成/成功)。

术语“步骤”对顺序计算有意义 - 一步跟随另一步 - 但是一旦你有并发计算,你有一个设置任务,它们没有必须以特定顺序运行,而不是步骤序列。术语“任务”由OS / 360推广,其特点是“具有固定任务数的多道程序设计(MFT)”和“具有可变任务数量的多道程序设计(MVT)”,尽管在这种情况下“任务”同义使用使用“进程”或“线程”,因为基本任务是“执行此程序”(因此生成的进程/线程执行任务),这可能是模糊性的来源。

正式“multitasking”表示“同时处理多个任务”,但实际上意味着操作系统(或虚拟机,或运行时或单个进程)“同时运行多个进程/线程”。

作为工作的任务和作为完成工作的过程/线程之间的明确区别在 task queue,如diagramthread pool:有一个(大的,可能无限制的)传入任务队列(待处理),由一个(小的,通常是固定的)执行一组线程,每个任务由单个线程执行,每个线程一次执行一个任务:活动任务对应于活动线程。具体来说,考虑一个多线程Web服务器,其中任务是“服务此网页请求”,并且每个线程(从磁盘或内存)获取或呈现网页(例如通过模板或PHP),然后返回结果。 / p>

正如您在上一个示例中所看到的,将任务与线程或进程区分开来通常很有用,特别是上下文“作业”和“任务”具有特定含义,但一般情况下它们都不明确。

因此,最清楚的是避免使用“作业”或“任务”,而是引用“进程集”,“进程”或“线程”,并使服务器引用请求 (或查询)而不是任务

答案 1 :(得分:15)

他们可以被认为是同一件事,真的取决于上下文。但是,进程通常是由操作系统管理的隔离实体。作业通常更多地是应用程序级别术语,或者只是执行一组特定任务的脚本。任务通常是工作的一部分 - 有时是唯一的部分。

答案 2 :(得分:9)

作业是用户提交的工作单元。它通常与批处理系统相关联。批处理作业可能是连续运行多个程序的请求[第144页]。但是,可以假设作业是运行单个程序的请求。因此,根据上下文,作业可以是程序(我们通常假设这个),也可以是一组程序(例如批处理系统)[第8页]。

进程是一个活动实体,它需要一组资源,包括处理器和特殊寄存器来执行其功能。它是可执行程序的单个实例。因此,从这里,您可以看到流程和程序之间的联系,从而找到工作。

Linux内核在内部将进程表示为任务[pg 742]。

来源:Tanenbaum的现代操作系统(第3版),Pearson Education,Inc出版,2009年

答案 3 :(得分:2)

任务表示在计算节点上执行单个进程或多个进程。用于执行计算的任务集合称为作业。作业用于保留任务所需的资源。

来源:工作和任务http://msdn.microsoft.com/en-us/library/bb525214%28v=vs.85%29.aspx

答案 4 :(得分:0)

好吧... 这可能不像这里描述的那么清楚。这很可能取决于某人正在处理的操作系统。

例如,当编译 DIGITAL Equipment OSF1 内核(也称为TruUnix64)时-当该Unix仍然存在时,则是在本世纪90年代末-术语{{1 }}致力于内核能够处理的并行任务数量。 它是内核可以在给定时刻执行的固定 tasks 数组。 因此,这是TASK可以完成的流程以及必须执行的内部任务的总和,即使spawn也不将其视为流程。然后,这是每个 NUMA 节点上允许内核执行的操作的级别非常低,而不是内核外部可以访问的操作。

另一方面,诸如 DEC VMS 之类的先前操作系统因其基本OS单元作为作业(您在ps下交互式登录)而可能执行(取决于系统)而闻名。以及帐户参数和特权)一次执行多个过程。 job(可执行文件)然后一次占用image和(大部分时间)多个线程(操作系统自己负责多线程)。

因此,工作不是与应用程序相关,而是与操作系统相关。

Windows 类似,它本身不支持process作为轻量级进程创建者,它倾向于创建进程(使用fork()原语看起来非常像40年前的 VMS / OpenVMS 上存在的版本),比Unix的版本重。在这里,我们用相同的词( process )描述(就OS而言)两个完全不同的现实:Windows进程比真正的Unix进程更接近VMS作业。 / p>

由于自TrueUnix64以来我没有配置/构建任何Unix内核,所以我无法讨论Debian或Linux OS的TASK内核参数。可能对具有此类操作系统的 tasks 限制的内在知识的人可以在这些系统中进一步解释这个概念。

总结: spawn - CreateProcess - ...您越是深入研究不同的操作系统,您就会获得更多的品种以及面临的可能矛盾的定义。

吉尔斯
[不是说英语的人,请原谅我的英语]。