(57)【要約】      （修正有）【課題】並列処理中に何れかのジョブについて生じたエラーによって他のジョブに悪影響が生じないプログラムの実行環境を提供する。【解決手段】ジョブ実行制御システム10は、予め起動された第１のJVMプロセス20〜第３のJVMプロセス24と、CPUコア管理テーブル26を有するスレッドマネージャ16と、ジョブサーバ14を備える。ジョブサーバ14は、新ジョブ実行時、未使用の第２のJVMプロセス22を割り当て、スレッドマネージャ16にCPUコアの空き数を照会し、空き数の範囲内でスレッドを起動し、各スレッドに割り当て処理を実行させる。プロセス22は、起動したスレッド数と、処理が完了したスレッド数をスレッドマネージャ16に通知する。スレッドマネージャ16は、ジョブサーバ14からの照会時にCPUコアの空き数を通知し、プロセス22から通知があった際にCPUコア管理テーブル26を更新する。【選択図】図１
2017010473.tif 000002
【特許請求の範囲】
【請求項１】
複数のCPUコアを有するコンピュータのメモリ上に予め起動された複数のプロセスと、
上記CPUコアの利用状況を管理するテーブルを有するスレッドマネージャと、
ジョブサーバとを備え、
このジョブサーバは、新たなジョブの実行時に上記プロセスの中で現在未使用のものを当該新規ジョブに専用的に割り当てる処理と、
上記スレッドマネージャに現時点におけるCPUコアの空き数を照会する処理と、
現時点におけるCPUコアの空き数の範囲内で、上記新規ジョブに割り当てたプロセス上に必要数のスレッドを起動する処理と、
起動したスレッドに当該ジョブ実行用のプログラムを割り当てて、具体的な処理を開始させる処理を実行し、
上記プロセスは、当該プロセス内に起動されたスレッドの数を上記スレッドマネージャに通知する処理と、
当該プロセス内におけるスレッドの処理が完了した際に、当該スレッドを削除すると共に、削除したスレッドの数を上記スレッドマネージャに通知する処理を実行し、
上記スレッドマネージャは、上記ジョブサーバからCPUコアの空き数の照会があった際に、上記テーブルを参照して、現時点におけるCPUコアの空き数を通知する処理と、
上記プロセスから起動されたスレッド数の通知があった際に、これに基づいて上記テーブルを更新する処理と、
上記プロセスから処理が完了したスレッド数の通知があった際に、これに基づいて上記テーブルを更新する処理を実行することを特徴とするジョブ実行制御システム。
【請求項２】
上記の各プロセスに関しては、予めそれぞれのクラスライブラリが起動されていることを特徴とする請求項１のジョブ実行制御システム。
【請求項３】
上記ジョブが複数のプログラムによる並列処理を含んでいる場合に、上記ジョブサーバは、同一のプロセス内に複数のスレッドを起動させ、各プログラムに別個のスレッドを割り当てることを特徴とする請求項１または２のジョブ実行制御システム。
【請求項４】
複数のCPUコアを有するコンピュータのメモリ上に予め起動された複数のプロセスと、上記CPUコアの利用状況を管理するテーブルを有するスレッドマネージャと、ジョブサーバとを備えたシステムにおいて、
上記ジョブサーバが、新たなジョブの実行時に上記プロセスの中で現在未使用のものを当該新規ジョブに専用的に割り当てると共に、上記スレッドマネージャに現時点におけるCPUコアの空き数を照会するステップと、
上記スレッドマネージャが、上記テーブルを参照し、現時点におけるCPUコアの空き数を上記ジョブサーバに通知するステップと、
上記ジョブサーバが、現時点におけるCPUコアの空き数の範囲内で、上記ジョブに割り当てたプロセス上に必要数のスレッドを起動すると共に、当該ジョブ実行用のプログラムを割り当てて、具体的な処理を開始させるステップと、
上記プロセスが、起動されたスレッドの数を上記スレッドマネージャに通知するステップと、
上記スレッドマネージャが、上記プロセスから通知されたスレッド数に基づいて上記テーブルを更新するステップと、
上記プロセスが、当該プロセス内におけるスレッドの処理が完了した際に、当該スレッドを削除すると共に、削除したスレッドの数を上記スレッドマネージャに通知するステップと、
上記スレッドマネージャが、上記プロセスから通知されたスレッド数に基づいて上記テーブルを更新するステップと、
からなることを特徴とするジョブ実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はジョブ実行制御システム及び方法に係り、特に、一つのプロセス内に複数のスレッドを起動させ、スレッド単位で異なる処理を並列実行させる技術の改良に関する。
【背景技術】
【０００２】
JAVA（登録商標）言語で実装されたバッチ処理基盤においては、一般的に、複数のプログラムから構成されるデータフロー処理が、１ジョブとしてまとめて実行される。
この際、先後関係に無いジョブ同士は、上記バッチ処理基盤の機能により、一つのJVM（JAVA仮想マシン）プロセス内に起動された複数のスレッドを用いて、並列処理に付される（非特許文献１参照）。
【０００３】
【非特許文献１】スタックトレースインターネットURL：http://music.geocities.jp/kreisler_liebesleid/java/stackTrace.html  検索日：２０１５年６月２２日
【発明の開示】
【発明が解決しようとする課題】
【０００４】
図３はその一例を示すものであり、相互に先後関係を有しないジョブＸとジョブＹに対して、一つのJVMプロセス50内に起動された３つのスレッドがそれぞれ割り当てられている。
すなわち、ジョブＸにおいては第１のプログラム52及び第２のプログラム54による並列処理が実行されるため、第１のスレッド56及び第２のスレッド58がそれぞれに割り当てられているのに対し、ジョブＹではプログラム60による単独処理が実行されるため、第３のスレッド62のみが割り当てられている。
【０００５】
。
この場合、ジョブＸとジョブＹは、JVMプロセス50のメモリ空間上にロードされたクラスライブラリ64を共同利用しながら、それぞれ独自の処理を実行する。
また、各スレッドにはそれぞれ固有のCPUコアが割り当てられているため、各ジョブにおいては相互に独立した高速な処理が確保される。
【０００６】
しかしながら、ジョブＸとジョブＹは同一のJVMプロセス50内で稼働しているため、何れか一方に生じた例外処理によって他方の処理が阻害されるという問題が生じる。例えば、ジョブＸの第１のプログラム52においてメモリ不足に起因するエラーが発生した場合、JVMプロセス50全体が異常終了してしまうため、ジョブＸの第２のプログラム54については勿論であるが、ジョブＹ用のプログラム60についてまでも同時に異常終了が発生する。
【０００７】
この発明は、このような現状を鑑みて案出されたものであり、並列処理されている何れかのジョブについて生じたエラーによって他のジョブに悪影響が生じることのない、プログラムの実行環境を提供することを目的としている。
【課題を解決するための手段】
【０００８】
上記の目的を達成するため、請求項１に記載したジョブ実行制御システムは、複数のCPUコアを有するコンピュータのメモリ上に予め起動された複数のプロセスと、上記CPUコアの利用状況を管理するテーブルを有するスレッドマネージャと、ジョブサーバとを備え、このジョブサーバは、新たなジョブの実行時に上記プロセスの中で現在未使用のものを当該新規ジョブに専用的に割り当てる処理と、上記スレッドマネージャに現時点におけるCPUコアの空き数を照会する処理と、現時点におけるCPUコアの空き数の範囲内で、上記新規ジョブに割り当てたプロセス上に必要数のスレッドを起動する処理と、起動したスレッドに当該ジョブ実行用のプログラムを割り当てて、具体的な処理を開始させる処理を実行し、上記プロセスは、当該プロセス内に起動されたスレッドの数を上記スレッドマネージャに通知する処理と、当該プロセス内におけるスレッドの処理が完了した際に、当該スレッドを削除すると共に、削除したスレッドの数を上記スレッドマネージャに通知する処理を実行し、上記スレッドマネージャは、上記ジョブサーバからCPUコアの空き数の照会があった際に、上記テーブルを参照して、現時点におけるCPUコアの空き数を通知する処理と、上記プロセスから起動されたスレッド数の通知があった際に、これに基づいて上記テーブルを更新する処理と、上記プロセスから処理が完了したスレッド数の通知があった際に、これに基づいて上記テーブルを更新する処理を実行することを特徴としている。
【０００９】
請求項２に記載したジョブ実行制御システムは、請求項１のシステムであって、さらに、上記の各プロセスに関しては予めそれぞれのクラスライブラリが起動されていることを特徴としている。
【００１０】
請求項３に記載したジョブ実行制御システムは、請求項１または２のシステムであって、さらに、上記ジョブが複数のプログラムによる並列処理を含んでいる場合に、上記ジョブサーバは、同一のプロセス内に複数のスレッドを起動させ、各プログラムに別個のスレッドを割り当てることを特徴としている。
【００１１】
請求項４に記載したジョブ実行制御方法は、複数のCPUコアを有するコンピュータのメモリ上に予め起動された複数のプロセスと、上記CPUコアの利用状況を管理するテーブルを有するスレッドマネージャと、ジョブサーバとを備えたシステムにおいて、上記ジョブサーバが、新たなジョブの実行時に上記プロセスの中で現在未使用のものを当該新規ジョブに専用的に割り当てると共に、上記スレッドマネージャに現時点におけるCPUコアの空き数を照会するステップと、上記スレッドマネージャが、上記テーブルを参照し、現時点におけるCPUコアの空き数を上記ジョブサーバに通知するステップと、上記ジョブサーバが、現時点におけるCPUコアの空き数の範囲内で、上記ジョブに割り当てたプロセス上に必要数のスレッドを起動すると共に、当該ジョブ実行用のプログラムを割り当てて、具体的な処理を開始させるステップと、上記プロセスが、起動されたスレッドの数を上記スレッドマネージャに通知するステップと、上記スレッドマネージャが、上記プロセスから通知されたスレッド数に基づいて上記テーブルを更新するステップと、上記プロセスが、当該プロセス内におけるスレッドの処理が完了した際に、当該スレッドを削除すると共に、削除したスレッドの数を上記スレッドマネージャに通知するステップと、上記スレッドマネージャが、上記プロセスから通知されたスレッド数に基づいて上記テーブルを更新するステップからなることを特徴としている。
【発明の効果】
【００１２】
請求項１に記載のジョブ実行制御システム及び請求項４に記載のジョブ実行方法によれば、ジョブ単位で異なるプロセスが専用的に割り当てられ、プロセス間での並列化が図られているため、あるスレッドにおいて実行中のプログラムについてエラーが生じても、他のプロセス上で稼働しているジョブに影響が及ぶことがない。
また、スレッドマネージャにより、全プロセスを通じたCPUコアの利用状況が管理されているため、数に限りのあるCPUコアを複数のプロセス間で効率的に使い回すことが可能となる。
【００１３】
請求項２に記載のジョブ実行制御システムの場合、待機中の各プロセスについてはクラスライブラリが事前にロードされているため、ジョブ実行時にロードする必要がなく、迅速な処理が確保される利点が生じる。
【００１４】
請求項３に記載のジョブ実行制御システムにあっては、ジョブが複数のプログラムに基づく並列処理によって実行される場合に、それぞれのプログラムに別個のスレッドを割り当てることができ、効率的な処理が可能となる。
【発明を実施するための最良の形態】
【００１５】
図１は、この発明に係るジョブ実行制御システム10の機能構成を示すブロック図であり、ジョブ実行管理部12と、ジョブサーバ14と、スレッドマネージャ16と、プロセスプーリング機構18と、プロセスプーリング機構18上に起動された第１のJVMプロセス20、第２のJVMプロセス22、第３のJVMプロセス24を備えている。
【００１６】
上記ジョブ実行管理部12、ジョブサーバ14、スレッドマネージャ16は、コンピュータのCPUが、OS及び専用のアプリケーションプログラムに従って動作することにより実現される。
【００１７】
このコンピュータは、複数のCPUコアを備えた所謂マルチコア・コンピュータよりなる。
また、上記スレッドマネージャ16は、CPUコアの空き状況を管理するためのCPUコア管理テーブル26を備えている。
【００１８】
上記プロセスプーリング機構18は、コンピュータのメモリ上に第１のJVMプロセス20〜第３のJVMプロセス24を予め起動し、利用時まで待機させておくことを可能にする、JAVA実行環境によって提供される仕組みを意味している。なお、予め起動しておくJVMプロセスの数に限定はない。
【００１９】
各JVMプロセスを起動する際には、それぞれのクラスライブラリ28もメモリ上にロードされるが、スレッドは利用時まで起動されることがない。
因みに、図１においては第１のJVMプロセス20が既に利用中であり、ジョブ１用の第１のプログラム30及び第２のプログラム32を処理するために、第１のスレッド34及び第２のスレッド36が起動している状態が示されている。
これに対し、第２のJVMプロセス22はまさに利用開始される直前の状態が示されており（詳細は後述）、第３のJVMプロセス24は完全な待機状態にある様子が示されている。
【００２０】
以下において、図２のフローチャートに従い、このシステム10の処理手順について説明する。
まず、上記ジョブ実行管理部12が、事前に策定されたバッチ処理のデータフロー設計データに従い、ジョブサーバ14に対してジョブ２用の第１のプログラム38、第２のプログラム40、第３のプログラム42の起動を要求する（Ｓ10）。
【００２１】
これを受けたジョブサーバ14は、プロセスプーリング機構18上に起動している各JVMプロセスの中から、待機中のJVMプロセスをジョブ２に割り当てる（Ｓ12）。
上記の通り、第１のJVMプロセス20がジョブ１のために稼働中であるため、ジョブサーバ14は第２のJVMプロセス22をジョブ２に割り当てる。
【００２２】
つぎにジョブサーバ14は、スレッドマネージャ16に対してCPUコアの空き状況を照会する（Ｓ14）。
これを受けたスレッドマネージャ16は、CPUコア管理テーブル26を参照し、現状で割り当て可能なCPUコアの空き数をジョブサーバ14に通知する（Ｓ16）。
図１においては、６個のCPUコアの中の２個がジョブ１に割り当て済であるため、「空き数：４」がスレッドマネージャ16からジョブサーバ14に返される。
【００２３】
ここで、ジョブ２の実行に必要なプログラムの数は３であり、CPUコアの空き数よりも小さいため、ジョブサーバ14は第２のJVMプロセス22上に３つのスレッド（第１のスレッド44、第２のスレッド46、第３のスレッド48）を起動し（Ｓ18）、各スレッドにジョブ２用の第１のプログラム38〜第３のプログラム42を割り当てて並列実行させる（Ｓ20）。
【００２４】
第２のJVMプロセス22からスレッドマネージャ16に対しては、起動されたスレッドの数が通知される（Ｓ22）。
これを受けたスレッドマネージャ16は、CPUコア管理テーブル26の値（使用コア数と空きコア数）を更新する（Ｓ24）。
【００２５】
そして、各スレッドにおける処理が完了した時点で、第２のJVMプロセス22は当該スレッドを削除すると共に、スレッドマネージャ16に対して処理の完了したスレッド数を通知する（Ｓ26）。
これを受けたスレッドマネージャ16は、CPUコア管理テーブル26の値を更新する（Ｓ28）。
【００２６】
このシステム10の場合、上記のようにジョブ単位で異なるJVMプロセスが割り当てられ、JVMプロセス間での並列化が図られているため、あるスレッドにおいて実行中のプログラムについてエラーが生じても、他のJVMプロセス上で稼働しているジョブに影響が及ぶことがない。
【００２７】
また、スレッドマネージャ16により、全JVMプロセスを通じたCPUコアの利用状況が管理されているため、数に限りのあるCPUコアを複数のJVMプロセス間で効率的に使い回すことが可能となる。
【００２８】
なお、上記のＳ16において、スレッドマネージャ16から通知されたCPUコアの空き数が必要数に達しない場合、ジョブサーバ14はその時点で可能な数のスレッドを立ちあげて一部のプログラムによる処理を開始させる一方、スレッドマネージャ16に対して定期的に空き数の照会を行う。
そして、CPUコアの新たな空きが発生する度に、次のスレッドを立ちあげて残りのプログラムによる処理を開始させる。
【００２９】
上記の通り、プロセスプーリング機構18上に待機中の各JVMプロセスについては、クラスライブラリ28が事前にロードされているため、ジョブ実行時にロードする必要がなく、迅速な処理が確保される。
【００３０】
上記においては、一つのジョブが複数のスレッドによって並列処理される例を示したが、一つのジョブ内で並列処理が発生しない場合には、JVMプロセス上に一つのスレッドのみが起動されることは言うまでもない。
【００３１】
上記においては、この発明をJAVA言語で実装されたバッチ処理基盤に適用する例を示したが、他のマルチスレッド対応言語（例えばC++）で実装されたバッチ処理基盤に適用することも当然に可能である。
【図面の簡単な説明】
【００３２】
【図１】この発明に係るジョブ実行制御システムの機能構成を示すブロック図である。
【図２】このシステムにおける処理手順を示すフローチャートである。
【図３】JAVA実行環境における複数ジョブの一般的な並列処理方法を示す模式図である。
【符号の説明】
【００３３】
10    ジョブ実行制御システム
12    ジョブ実行管理部
14    ジョブサーバ
16    スレッドマネージャ
18    プロセスプーリング機構
20    第１のJVMプロセス
22    第２のJVMプロセス
24    第３のJVMプロセス
26    CPUコア管理テーブル
28    クラスライブラリ
30    ジョブ１用の第１のプログラム
32    ジョブ１用の第２のプログラム
34    第１のJVMプロセス内の第１のスレッド
36    第１のJVMプロセス内の第２のスレッド
38    ジョブ２用の第１のプログラム
40    ジョブ２用の第２のプログラム
42    ジョブ２用の第３のプログラム
44    第２のJVMプロセス内の第１のスレッド
46    第２のJVMプロセス内の第２のスレッド
48    第２のJVMプロセス内の第３のスレッド
【図１】
2017010473.tif 000003
【図２】
2017010473.tif 000004
【図３】
2017010473.tif 000005