web-dev-qa-db-ja.com

ジョブ、タスク、プロセス、違いは何ですか

これらの概念の違いは何ですか?

29
mochidino

「プロセス」は明確に定義されています。 「ジョブ」と「タスク」はあいまいです。

基本的に、ジョブ/タスクはwhat作業が行われますが、プロセスはhow完了します。通常、擬人化されてwhoが実行します。ジョブは全体的な作業単位であり、-構成されたタスクです。実際には使用方法は非常に一貫性がなく、多くの場合「タスク」==「プロセス」ですが、正式にはプロセス実行タスクです。

Processは、threadと同様に、明確に定義されたオペレーティングシステムの概念です。 a process は、実行中のプログラムのインスタンスであり、resourcesの基本単位です。プロセスは、そのイメージ、実行コンテキスト、メモリで構成されるか、「所有」します、ファイルなど。語源的にプロセスは、プロセスによって実行されるステップですまたは。プロセスは、スケジューリングの単位である1つ以上のスレッドで構成され、プロセスの一部のサブセット(他のスレッドと共有される可能性があります)で構成されます。実行コンテキストなどです。伝統的に、スレッドはプロセッサ上のexecutionの単位です(スレッドは「実行中のもの」です)が、マルチコアプロセッサと ハードウェアスレッド では、いくつかのスケジューリングが行われますシングルコアのレベルでも。プロセスとスレッドにはさまざまな種類があり、正確な定義はプラットフォームによって異なります。

Jobtaskは今日、あいまいで曖昧な用語であり、特にタスク。 「 ジョブ 」は多くの場合、プロセスのセットを意味しますが、「 タスク 」はプロセス、スレッド、プロセスまたはスレッド、または明確に、 work done byプロセスまたはスレッド。

命名がどのように混乱しているかを理解するために、 Windowsタスクマネージャー は(実行中)プロセスを管理し、一方で Windowsタスクスケジューラ スケジュールプログラム今後実行するために、伝統的に ジョブスケジューラ として知られているもので、.job拡張子!

job 」という用語は、伝統的に「仕事」を意味し(「職業」ではない)、「 job production 」は「カスタム生産」を意味し、 バッチ生産 (一度に多くのアイテム、一度に1ステップ)および フロー生産 (一度に多くのアイテム、すべてのステップを同時に、アイテムごとに)。これらの区別は、特に、矛盾した用語 " batch job "において、コンピューティングで不鮮明になったことに注意してください。

コンピューティングでは、「ジョブ」はメインフレーム上の非対話型処理、特にIBMの ジョブ制御言語DOS/36 および OS/36 に由来します= 1960年代半ばの、正式には「オペレーティングシステムの作業単位」を意味します。これはstepsで構成され、それぞれが特定のrequestを実行しますプログラム。初期のコンピューターは、主に国勢調査や請求などの バッチ処理 (同じプログラムを多数の入力データで実行)し、標準タイプの単発jobは、ソース、次にバッチのデータを処理できます。後でbatchは、1回限りのアイテムでも複数のアイテムでも、すべての非インタラクティブコンピューティングに適用されるようになりました。

Unixシェルでは、「 ジョブ 」はシェルの表現であり、 プロセスグループ –すべてがシグナルを送信できる一連のプロセス–具体的にはパイプラインとその子孫プロセス;スクリプトを実行すると、メインフレームとまったく同じようにジョブが開始されることに注意してください。ジョブはプロセスが完了するまで行われず、ジョブを停止、再開、または終了できます。これは、プロセスの中断、再開、または終了に相当します。したがって、正式にジョブはプロセスグループとは異なりますが、これは微妙な違いであるため、「ジョブ」を使用して「プロセスのセット」を意味することがよくあります。

従来のジョブ(およびバッチ)には有限の入力データがあり、処理が正常に完了したかどうかに関係なく完了します。対照的に、Webサーバーなどのサーバーを実行している場合、要求のストリームなどの入力は無制限です(以前はcodata)。これはフローの生成に似ており、プロセス(または「ジョブ」)は決して終了または「キャンセル」されても完了しません。 quipでは、「サーバーのジョブは決して実行されません」(正式には、終了ステータスはCOMPLETED/SUCCESSではなくCANCELEDになります)。

「ステップ」という用語は、シーケンシャルコンピューティングにとって意味があります。あるステップは次のステップに従いますが、並行コンピューティングを実行すると、-set -tasksがあり、必ずしも実行されるとは限りませんシーケンスステップではなく、特定の順序。 「タスク」という用語はOS/360で普及し、「固定数のタスクによるマルチプログラミング(MFT)」と「可変数のタスクによるマルチプログラミング(MVT)」が特徴でしたが、この場合、「タスク」は同義語として使用されました。 「プロセス」または「スレッド」では、基本的なタスクは「このプログラムを実行する」であるため(結果として生じるプロセス/スレッドがタスクを実行する)、おそらくあいまいさの原因になります。

正式には「 マルチタスク 」は「複数のタスクを同時に処理する」ことを意味しますが、実際には「複数のプロセス/スレッドを同時に実行する」オペレーティングシステム(または仮想マシン、ランタイム、または個別のプロセス)を意味します。

workとしてのタスクと、作業の方法としてのプロセス/スレッドとの明確な区別doneタスクキュー で与えられます。 diagram of thread pool :(大きな、潜在的に無制限の)着信タスク(保留中)のキューがあり、(小さな、多くの場合、固定された)スレッドのセットによって実行されます、各タスクは単一のスレッドによって実行され、各スレッドは一度に単一のタスクを実行します。アクティブタスクはアクティブスレッドに対応します。具体的には、タスクが「このWebページリクエストのサービス」であり、各スレッドが(ディスクまたはメモリから)フェッチまたはWebテンプレートを(たとえば、テンプレートまたはPHPによって)レンダリングし、結果を返すマルチスレッドWebサーバーを考えます。

この最後の例からわかるように、タスクとスレッドまたはプロセスを区別すると便利なことがよくあります。特に、「ジョブ」と「タスク」には特定の意味がありますが、一般的にあいまいです。

したがって、最も明確なのは、「ジョブ」または「タスク」の使用を避け、代わりに「プロセスのセット」、「プロセス」、または「スレッド」を参照し、サーバーがrequests(または- [タスクではなくクエリ)。

28
Nils von Barth

それらはすべて同じものと考えることができ、実際にはコンテキストに依存します。ただし、プロセスは通常、オペレーティングシステムによって管理される分離されたエンティティです。多くの場合、ジョブは、アプリケーションレベルの用語、または特定の一連のタスクを実行するために実行される単なるスクリプトです。多くの場合、タスクはジョブの一部です-場合によっては唯一の部分です。

15
Khorkrak

ジョブは、ユーザーが送信した作業の単位です。これは通常、バッチシステムに関連付けられています。バッチジョブは、複数のプログラムを連続して実行する要求である場合があります[144ページ]。ただし、ジョブは単一のプログラムを実行する要求であると想定できます。したがって、コンテキストに応じて、ジョブはプログラム(通常はこれを想定)またはプログラムのセット(バッチシステムなど)になります[ページ8]。

プロセスはアクティブなエンティティーであり、その機能を実行するためのプロセッサーや特殊レジスターなど、一連のリソースが必要です。これは、実行可能プログラムの単一インスタンスです。したがって、ここから、プロセスとプログラム、つまりジョブの間の接続を確認できます。

Linuxカーネルは内部的にプロセスをタスクとして表します[pg 742]。

出典:Pearson Education、Inc、2009年に発行されたTanenbaumによるモダンオペレーティングシステム(第3版)

9
Dhruv Gairola

タスクは、計算ノードでの単一プロセスまたは複数プロセスの実行を表します。計算の実行に使用されるタスクのコレクションは、ジョブと呼ばれます。ジョブは、タスクが必要とするリソースを予約するために使用されます。

ソース:ジョブとタスク http://msdn.Microsoft.com/en-us/library/bb525214%28v=vs.85%29.aspx

2
Prashant

まあ...これはここで説明するほど明確ではないかもしれません。それは誰かが扱っているオペレーティングシステムに非常によく依存しているかもしれません。

たとえば、 DIGITAL Equipment OSF1 カーネル(TruUnix64とも呼ばれます)-そのUnixがまだ存在していた90年代の終わり、世紀の初め-TASKという用語は、カーネルが処理できる並列タスクの数を表すものでした。これはtasksの固定配列で、カーネルは特定の瞬間に実行できました。したがって、それはspawnによってプロセスと見なされなくても、psと実行する必要がある内部タスクの合計でした。次に、それぞれのカーネルに許可された非常に低レベルのアクション数でした NUMA ノード、カーネルの外からアクセスできるものではありません。

一方、以前のオペレーティングシステムのような DEC VMS ベースOSユニットをジョブ(jobで対話的にログに記録)として(システムとアカウントのパラメーターと特権に応じて)一度に多くのプロセスを実行することで知られていました。 image(実行可能ファイル)は、一度にprocessと(ほとんどの場合)複数のスレッド(OSがマルチスレッドを処理)を占有します。

したがって、その仕事はアプリケーションに関連するものではなく、実際にはOSに関連するものでした。

やや似ている Windowsは、軽量のプロセス作成者としてfork()をネイティブでサポートしていないため、processesを作成する傾向があります(spawn - CreateProcess -存在していたものと非常によく似ているプリミティブ VMS / OpenVMS 40年前)それはUNIXのものより重いです。ここでは、同じWord(プロセス)で(OSの観点から)まったく異なる2つの現実を説明しています。Windowsプロセスは、真のUnixプロセスよりもVMSジョブに近い傾向があります。

TrueUnix64以降、Unixカーネルを構成/構築していなかったため、DebianまたはLinux OSのTASKカーネルパラメータについては説明できません。この種のOSのtasks制限について内面の知識がある人が、これらのシステムのこの概念についてさらに説明できるのは興味深いかもしれません。

結論として:task, process, job, spawn, fork, thread ...さまざまなOSを掘り下げるほど、より多くの種類が得られ、矛盾する定義に直面する可能性があります。

ジル
[英語を母国語としない人、私の英語を許してください]。

0