コンピューティングにおいて、バッチ処理とは、ソフトウェアジョブを自動化された無人方式で実行することです。ユーザーはジョブの実行スケジュールを設定し、処理システムがジョブを実行するのを待ちます。通常、ジョブは設定された時刻、イベント発生時、またはコンピュータのリソースが利用可能になった時に実行されるようにスケジュールされます。
「バッチ処理」という用語は、従来、生産方法をジョブ生産(単発生産)、バッチ生産(複数の品目を一度に、1つの工程ずつ生産)、フロー生産(大量生産、すべての工程を同時に行う)に分類していたことに由来する。
初期のコンピュータは、一度に1つのプログラムしか実行できませんでした。各ユーザーは、決められた時間だけコンピュータを独占的に使用できました。ユーザーは、パンチカードや磁気テープ、紙テープなどにプログラムとデータを携えてコンピュータの前に現れ、プログラムをロードし、実行、デバッグを行い、完了したら出力結果を持ち帰りました。
コンピュータの高速化に伴い、セットアップと終了に要する時間が利用可能なコンピュータ時間の割合が大きくなりました。オペレーティングシステムの前身であるモニタと呼ばれるプログラムが開発され、オフラインで準備された磁気テープから一連のプログラム、つまり「バッチ」を処理することができました。モニタはコンピュータにロードされ、バッチの最初のジョブを実行します。ジョブの終了時に制御を取り戻し、バッチが完了するまで次のジョブをロードして実行します。多くの場合、バッチの出力は磁気テープに書き込まれ、オフラインで印刷またはパンチされます。モニタの例としては、IBMのFortran Monitor System、SOS(Share Operating System)、そして1960年にIBMの709xシステム向けに開発されたIBSYSなどがあります。 [ 1 ] [ 2 ]
マルチプログラミングが可能な第 3 世代コンピュータ[ 3 ]は 1960 年代に登場し始めました。これらのシステムでは、一度に 1 つのバッチ ジョブを実行する代わりに、システムをできるだけビジーに保つために、複数のバッチ プログラムを同時に実行できます。 1 つ以上のプログラムが入力待ちの状態になり、 1 つのプログラムが CPU 上でアクティブに実行され、他のプログラムが出力を生成している可能性があります。 オフラインの入出力の代わりに、スプーラと呼ばれるプログラムがカード、ディスク、またはリモート ターミナルからジョブを読み取り、実行するためにジョブ キューに配置します。デッドロックを防ぐために、ジョブスケジューラは各ジョブのリソース要件 (メモリ、磁気テープ、マウント可能なディスクなど) を知る必要があるため、この情報を構造化された方法で提供するためにさまざまなスクリプト言語が開発されました。 おそらく最もよく知られているのは IBM のジョブ制御言語(JCL) です。 ジョブ スケジューラは、優先度、メモリ サイズなどさまざまな基準に従って実行するジョブを選択します。 リモート バッチは、多くの場合パンチ カード リーダーとライン プリンタを備えたリモート ターミナルからバッチ ジョブを送信する手順です。 [ 4 ] IBM System/360アタッチド サポート プロセッサーのように、接続された小型で安価なシステムを使用して、1 台または複数の大型コンピューターのバッチ入力と出力をスプールするために、非対称マルチプロセッシングが使用される場合がある。 [ a ]

最初の汎用タイムシェアリングシステムである互換タイムシェアリングシステム(CTSS)は、バッチ処理と互換性がありました。これにより、バッチ処理から対話型コンピューティングへの移行が容易になりました。[ 5 ]
1960年代後半以降、テキストベースのコンピュータ端末インターフェース( Unixシェルやread-eval-printループなど)や、後にグラフィカルユーザーインターフェースを介した対話型コンピューティングが一般的になった。コンパイルなどの単発の作業や、複数の項目をバッチで処理する非対話型コンピューティングは、後からバッチ処理と呼ばれるようになり、バッチジョブ(初期には「バッチオブジョブ」と呼ばれることが多かった)という用語が一般的になった。初期の使用例は、ミシガン大学のミシガン端末システム(MTS)周辺で特に見られる。 [ 6 ]
タイムシェアリングは確かに存在したが、企業データ処理には十分な性能を備えていなかった。これは、以前の人間が操作していたユニットレコード機器とは全く関係がない。
対話型ではない計算は、一般的なデータ処理とシステム管理タスク(システムソフトウェアを使用)の両方において、コンピューティングにおいて依然として広く用いられています。複数のプログラムを実行し、いくつかの追加の「接着剤」ロジックを備えた高レベルプログラムは、今日ではスクリプトと呼ばれることが多く、スクリプト言語、特にシステムタスク用のシェルスクリプトで記述されます。IBM PC DOSおよびMS-DOSでは、これはバッチファイルとして知られています。これには、 UNIXベースのコンピュータ、Microsoft Windows、macOS ( BSD Unixカーネルを基盤とする)、さらにはスマートフォンも含まれます。実行中のスクリプト、特に対話型ログインセッションから実行されるスクリプトは、ジョブと呼ばれることが多いですが、この用語は非常に曖昧に使用されています。
「z/OS のバッチ処理に直接対応するものは、PC や UNIX システムには存在しません。バッチ ジョブは通常、スケジュールされた時間または必要に応じて実行されます。おそらく最も近い比較対象は、 UNIX のatコマンドまたはcronコマンドで実行されるプロセスですが、違いは大きいです。」[ 7 ]
バッチ処理は、多くの一般的な業務プロセスがバッチ処理に適しているため、依然として多くの組織にとって不可欠です。オンラインシステムも手動による介入が不要な場合には機能しますが、通常、大量の反復作業を実行するように最適化されていません。そのため、新しいシステムであっても、一日の終わりに情報を更新したり、レポートを作成したり、文書を印刷したり、その他特定の業務期限内に確実に完了する必要のある非対話型タスクを実行するためのバッチ処理アプリケーションが、通常1つ以上含まれています。
フロー処理に適したアプリケーションもあります。例えば、一度に単一の入力からのデータのみを必要とするアプリケーション(合計値などを必要としないアプリケーション)です。各入力に対して、前のステップが完了するたびに次のステップを開始します。この場合、フロー処理によって個々の入力のレイテンシが低減され、バッチ全体の完了を待たずに処理を完了できます。しかし、多くのアプリケーション、特に合計値などの計算では、すべてのレコードからのデータが必要です。この場合、使用可能な結果を得るにはバッチ全体が完了する必要があり、部分的な結果は使用できません。
最新のバッチアプリケーションは、大量処理に必要な耐障害性とスケーラビリティを実現するために、Jem The Bee、 Spring Batch [ 8 ] 、 Java用に記述されたJSR 352 [ 9 ]の実装、その他のプログラミング言語用のフレームワークなどの最新のバッチフレームワークを利用しています。高速処理を保証するために、バッチアプリケーションは、バッチジョブを多数のプロセッサに分割するために、グリッドコンピューティングソリューションと統合されることがよくありますが、これにはプログラミング上の大きな課題があります。大量バッチ処理は、システムおよびアプリケーションアーキテクチャにも特に大きな要求を課します。最新のメインフレームコンピュータなど、強力な入出力性能と垂直スケーラビリティを備えたアーキテクチャは、他のアーキテクチャよりも優れたバッチ性能を提供する傾向があります。
バッチウィンドウとは、「オンライン活動が比較的少ない期間」[ 11 ]であり、コンピュータシステムが対話型オンラインシステムからの干渉を受けずに、または対話型オンラインシステムと連携してバッチジョブを実行できる期間です。
銀行の終業時(EOD)業務には、カットオーバーという概念が必要です。これは、特定の日のバッチ処理活動における取引とデータの処理を締め切ることを意味します(「午後3時以降の預金は翌日に処理される」)。
オンラインシステムの稼働時間に対する要求がグローバル化、インターネット、その他のビジネスニーズをサポートするために拡大するにつれて、バッチウィンドウは縮小し[ 12 ] [ 13 ]、オンラインデータが可能な限り長時間利用可能であることを必要とする技術にますます重点が置かれるようになりました。
バッチサイズとは、1回のバッチ処理で処理される作業単位の数を指します。例としては、以下のようなものがあります。
IBMメインフレームのz/OSオペレーティング システムまたはプラットフォームは、その起源、長い歴史、そして継続的な進化により、バッチ処理機能において最も高度に洗練され、進化を遂げたシステムと言えるでしょう。今日では、このようなシステムは、単一のオペレーティング システムイメージ内で、数百、あるいは数千もの同時実行されるオンライン タスクとバッチ タスクをサポートするのが一般的です。同時実行されるバッチ処理とオンライン処理を支援するテクノロジーには、ジョブ制御言語(JCL)、 REXXなどのスクリプト言語、ジョブ エントリ サブシステム ( JES2およびJES3 )、ワークロード マネージャ(WLM)、自動再起動マネージャ (ARM)、リソース リカバリ サービス (RRS)、IBM Db2データ共有、パラレル シスプレックス、 HiperDispatchなどの独自のパフォーマンス最適化、I/O チャネル アーキテクチャなど、数多くのものがあります。
Unix プログラムのcron、at、およびbatch(現在batchは の派生版at) は、複雑なジョブのスケジューリングを可能にします。Windows にはジョブ スケジューラがあります。ほとんどの高性能コンピューティングクラスタは、クラスタの使用率を最大化するためにバッチ処理を使用します。[ 15 ]
SOS (SHARE Operating System) から発展した 7090 用オペレーティングシステムです。
FMSを
Bコア上で「バックグラウンド」ユーザーとして、ベアマシンとほぼ同じ効率で実行できること、またFMSバッチ用にコンパイルされたプログラムを「フォアグラウンド」タイムシェアリング環境でロードして実行できること(いくつかの制限はあるものの)を意味して、「
互換性がある」と呼ばれていました。 ... この機能により、計算センターはバッチからタイムシェアリングへ段階的に移行することができました。
352は、Javaバッチ処理のオープン標準仕様です。…使用されるプログラミング言語は、利用可能なものに基づいて、時間の経過とともに進化しました。
マルチユーザー、共有、スマートバッチ処理システムにより、スケーラビリティが向上します.....ほとんどの
HPC
クラスターはLinuxです