(57)【特許請求の範囲】
【請求項１】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータに、
Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドの総数が、前記コンピュータのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する工程と、
前記演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項２】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータに、
アクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、
前記算出工程における演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が前記コンピュータのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する工程と、
前記アクティブなスレッドの総数が、前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する工程と、
前記演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項３】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータに、
Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、
前記第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項４】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｘ＜ｙ＜ｚ
の関係が成り立つことを特徴とする請求項３記載のマルチスレッドプログラム。
【請求項５】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータに、
アクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、
前記算出工程における演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が、当該コンピュータのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、
前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、
前記第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項６】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを処理するために生成する全スレッド数ｚとの間に、
ｙ＜ｘ＜ｚ
の関係が成り立つことを特徴とする請求項５記載のマルチスレッドプログラム。
【請求項７】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータを、
アクティブなスレッドの総数を取得する手段と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する手段と、
前記アクティブなスレッド総数が前記コンピュータのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する手段と、
前記演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項８】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータを、
アクティブなスレッドの総数を取得する手段と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、
前記算出手段の演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が前記コンピュータのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する手段と、
前記アクティブなスレッドの総数が、前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する手段と、
前記演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項９】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータを、
Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、
前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、
前記第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項１０】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｘ＜ｙ＜ｚ
の関係が成り立つことを特徴とする請求項９記載のマルチスレッドプログラム。
【請求項１１】
コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
各スレッドは、前記コンピュータを、
アクティブなスレッドの総数を取得する手段と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、
前記算出手段の演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が、当該コンピュータのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、
前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、
前記第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項１２】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｙ＜ｘ＜ｚ
の関係が成り立つことを特徴とする請求項１１記載のマルチスレッドプログラム。
【請求項１３】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段に、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が前記サーバの演算手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドの総数が、前記サーバのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する工程と、
当該演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項１４】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段に、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
アクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、
前記算出工程における演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が前記サーバのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する工程と、
前記アクティブなスレッドの総数が、前記サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇すると判断する工程と、
前記演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項１５】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段に、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドの総数が、当該演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、
前記第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項１６】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｘ＜ｙ＜ｚ
の関係が成り立つことを特徴とする請求項１５記載のマルチスレッドプログラム。
【請求項１７】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段に、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
アクティブなスレッドの総数を取得する工程と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、
前記算出工程における演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が、当該サーバのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、
前記アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、
前記第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
【請求項１８】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｙ＜ｘ＜ｚ
の関係が成り立つことを特徴とする請求項１７記載のマルチスレッドプログラム。
【請求項１９】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段を、
前記クライアントから前記ジョブの処理要求を取得する手段と、
アクティブなスレッドの総数を取得する手段と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が前記サーバの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する手段と、
前記アクティブなスレッド数が前記サーバのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する手段と、
当該演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項２０】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段を、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する手段と、
アクティブなスレッドの総数を取得する手段と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、
前記算出手段の演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が前記サーバのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する手段と、
前記アクティブなスレッドの総数が、前記サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇するか否かを判断する手段と、
前記演算処理手段のハードウエア資源及び前記Ｉ／Ｏ資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項２１】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段を、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する手段と、
Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、
前記Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、
前記アクティブなスレッドの総数が、当該演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、
前記第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項２２】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｘ＜ｙ＜ｚ
の関係が成り立つことを特徴とする請求項２１記載のマルチスレッドプログラム。
【請求項２３】
少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
各スレッドは、サーバの演算処理手段を、
前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する手段と、
アクティブなスレッドの総数を取得する手段と、
前記アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、
前記アクティブなスレッドの総数から前記Ｉ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、
前記算出手段の演算結果である前記Ｉ／Ｏ待ちのアクティブなスレッド数が、当該サーバのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、
前記アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、
前記第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
【請求項２４】
前記演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、前記Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数ｚとの間に、
ｙ＜ｘ＜ｚ
の関係が成り立つことを特徴とする請求項２３記載のマルチスレッドプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のスレッドが並列に処理されるマルチスレッドプログラムに関し、特に、アクティブなスレッド数に加えＩ／Ｏ待ちスレッド数に基づいて、輻輳制御を行うマルチスレッドプログラムに関する。
【０００２】
【従来の技術】
近年、コンピュータにおいて実行されるアプリケーションプログラムは高機能化されており、電子計算機が処理するデータ量も増加しているため、プログラムの実行速度を高速化する必要がある。
このため、コンピュータに実行させるアプリケーションプログラムをマルチスレッド化する手法が用いられる。
【０００３】
マルチスレッドプログラムとは、コンピュータに実行させる処理をスレッドと呼ばれる最小単位に分割して要求し、各スレッドごとにコンピュータに実行させるプログラムである。一つのアプリケーションの処理を複数のスレッドに分けて実行すれば処理効率を向上できるため、プログラムのマルチスレッド化は、コンピュータシステムにおいてアプリケーションの実行速度を向上させる手法の一つとして用いられている。
マルチスレッドのアプリケーションプログラムは、ＣＰＵの処理時間を非常に短い単位に分割し、複数のスレッドに順番に割り当てることによって、複数の処理を同時に行っているようにみせている。
【０００４】
マルチスレッドプログラムにおいては、プログラムを実行させるコンピュータのＣＰＵ資源やＩ／Ｏ資源にトランザクション量が集中するとＣＰＵ資源やＩ／Ｏ資源が枯渇してしまうことがあるため、所定量以上のトランザクションが集中しないように制御を行う必要がある。
なお、本明細書中においては、ＣＰＵ資源やＩ／Ｏ資源にトランザクション量が集中することを「輻輳」と、所定量以上のトランザクションが集中しないように制御することを「輻輳制御」と表現する。
【０００５】
例えば、マルチスレッド環境下のサーバ／クライアントシステムにおいては、サーバのリソースやスレッドの枯渇を防止するために輻輳制御を行い、一定数のトランザクション以上は同時に処理しないようにする必要がある。
【０００６】
図１１を用いて、従来のマルチスレッドプログラムにおける輻輳制御を説明する。
このサーバ／クライアントシステムは、クライアント１１０１、１１０２及び１１０３とサーバ２０００とがネットワーク網１１０４を介して接続されたシステムである。
サーバ２０００は、サーバアプリケーション１１０５を実行する不図示のＣＰＵを有し、記憶装置１１１０が外付けされている。サーバアプリケーション１１０５は、１〜ｎまでの複数のスレッド（図は、ｎ＝３の場合）と輻輳情報１１０９とを備える。輻輳情報１１０９は、アクティブなスレッド数を管理するための情報である。
スレッド１１０６は、不図示のＣＰＵが実行する処理であり、要求電文受信部１１１１、輻輳情報加算部１１１２、輻輳制御部１１１３、業務処理部１１１４、輻輳情報減算部１１１５及び応答電文受信部１１１６を有する。
要求電文受信部１１１１は、ネットワーク網１１０４を介してクライアント１１０１、１１０２及び１１０３から電文を受信する機能である。なお、「電文」とは、所定の通信プロトコルに従って送受信される固定長又は可変長のデータである。輻輳情報加算部１１１２は、輻輳情報１１０９内のアクティブなスレッド数をインクリメントする機能である。輻輳制御部１１１３は、輻輳情報１０９を基に、一定数以上のトランザクションを同時に処理しないように制御する機能である。業務処理部１１１４は、クライアントから要求された処理を実行する機能である。輻輳情報減算部１１１５は、輻輳情報１１０９内のアクティブなスレッド数をデクリメントする機能である。応答電文送信部１１１６は、ネットワーク網１１０４を介してクライアント１１０１、１１０２及び１１０３へ電文を送信する機能である。上記各部は、不図示のＣＰＵにそれぞれの機能を実現させる。なお、スレッド１１０７及びスレッド１１０８はスレッド１１０６と同様の構成である。
【０００７】
不図示のＣＰＵがスレッド１０６を実行する場合、サーバアプリケーション１１０５は、業務処理部１１１４を実行する前後に輻輳情報加算部１１１２及び輻輳情報減算部１１１５を用いて輻輳情報１１０９内のアクティブスレッド数を管理し、スレッドを実行するか否かを輻輳制御部１１１３が輻輳情報１１０９内のアクティブスレッド数に基づいて判断することによってマルチスレッド制御を行っていた。
【０００８】
【発明が解決しようとする課題】
しかし、従来のマルチスレッド制御では、サーバアプリケーション１１０５内のスレッドの枯渇とスレッドを実行する不図示のＣＰＵのネックとを単一のアクティブスレッド数から成る輻輳情報で制御していたため、ＣＰＵネックやＩ／Ｏネックを十分に防止することができなかった。
【０００９】
本発明はかかる問題に鑑みてなされたものであり、ＣＰＵネックやＩ／Ｏネックの発生をより厳密に防止することを目的とする。
【００１０】
【課題を解決するための手段】
上記目的を達成するため、本発明は、第１の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数がコンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、コンピュータのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する工程と、演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【００１１】
また、上記目的を達成するため、本発明は、第２の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、アクティブなスレッドの総数からＩ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるＩ／Ｏ待ちのアクティブなスレッド数がコンピュータのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する工程と、アクティブなスレッドの総数が、コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する工程と、演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【００１２】
また、上記目的を達成するため、本発明は、第３の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第３の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｘ＜ｙ＜ｚの関係が成り立つことが好ましい。
【００１３】
また、上記目的を達成するため、本発明は、第４の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、アクティブなスレッドの総数からＩ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるＩ／Ｏ待ちのアクティブなスレッド数が、当該コンピュータのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第４の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｙ＜ｘ＜ｚの関係が成り立つことが好ましい。
【００１４】
また、上記目的を達成するため、本発明は、第５の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちＩ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数がコンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する手段と、アクティブなスレッド総数がコンピュータのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する手段と、演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【００１５】
また、上記目的を達成するため、本発明は、第６の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、アクティブなスレッドの総数からＩ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるＩ／Ｏ待ちのアクティブなスレッド数がコンピュータのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのＩ／Ｏ資源が枯渇すると判断する手段と、アクティブなスレッドの総数が、コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する手段と、演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【００１６】
また、上記目的を達成するため、本発明は、第７の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第７の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｘ＜ｙ＜ｚの関係が成り立つことが好ましい。
【００１７】
また、上記目的を達成するため、本発明は、第８の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、アクティブなスレッドの総数からＩ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるＩ／Ｏ待ちのアクティブなスレッド数が、当該コンピュータのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第８の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｙ＜ｘ＜ｚの関係が成り立つことが好ましい。
【００１８】
また、上記目的を達成するため、本発明は、第９の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数がサーバの演算手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、サーバのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する工程と、当該演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【００１９】
また、上記目的を達成するため、本発明は、第１０の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、アクティブなスレッドの総数からＩ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるＩ／Ｏ待ちのアクティブなスレッド数がサーバのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する工程と、アクティブなスレッドの総数が、サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇すると判断する工程と、演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【００２０】
また、上記目的を達成するため、本発明は、第１１の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、当該演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第１１の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｘ＜ｙ＜ｚの関係が成り立つことが好ましい。
【００２１】
また、上記目的を達成するため、本発明は、第１２の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する工程と、アクティブなスレッドの総数からＩ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるＩ／Ｏ待ちのアクティブなスレッド数が、当該サーバのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断工程と、アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断工程と、第１及び第２の判断工程のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第１２の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｙ＜ｘ＜ｚの関係が成り立つことが好ましい。
【００２２】
また、上記目的を達成するため、本発明は、第１３の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブの処理要求を取得する手段と、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちＩ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数がサーバの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する手段と、アクティブなスレッド数がサーバのＩ／Ｏ資源に基づいて予め設定される閾値を超える場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する手段と、当該演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【００２３】
また、上記目的を達成するため、本発明は、第１４の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブを実行するためのタスクの処理要求を取得する手段と、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、アクティブなスレッドの総数からＩ／Ｏ待ちでないアクティブなスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるＩ／Ｏ待ちのアクティブなスレッド数がサーバのＩ／Ｏ資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのＩ／Ｏ資源が枯渇すると判断する手段と、アクティブなスレッドの総数が、サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇するか否かを判断する手段と、演算処理手段のハードウエア資源及びＩ／Ｏ資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【００２４】
また、上記目的を達成するため、本発明は、第１５の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブを実行するためのタスクの処理要求を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数とＩ／Ｏ待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数を取得する手段と、Ｉ／Ｏ待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、アクティブなスレッドの総数が、当該演算処理手段のＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第１５の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｘ＜ｙ＜ｚの関係が成り立つことが好ましい。
【００２５】
また、上記目的を達成するため、本発明は、第１６の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブを実行するためのタスクの処理要求を取得する手段と、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちＩ／Ｏ待ちでないスレッド数を取得する手段と、アクティブなスレッドの総数からＩ／Ｏ待ちでないスレッド数を減算することによってＩ／Ｏ待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるＩ／Ｏ待ちのアクティブなスレッド数が、当該サーバのＩ／Ｏ資源に基づいて予め設定された閾値を超えるか否かを判断する第１の判断手段と、アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第２の判断手段と、第１及び第２の判断手段のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第１６の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値ｘと、Ｉ／Ｏ資源に基づいて設定される閾値ｙと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数ｚとの間に、ｙ＜ｘ＜ｚの関係が成り立つことが好ましい。
【００２６】
〔作用〕
本発明によるマルチスレッドプログラムは、ＣＰＵ処理中のスレッドの数とＩ／Ｏ待ちのスレッドの数とを別個にカウントし、それぞれの値に基づいて輻輳制御を実行する。これによって、従来よりも厳密にＣＰＵネックやＩ／Ｏネックによる輻輳を防止できる。
【００２７】
【発明の実施の形態】
〔第１の実施形態〕
本発明を好適に実施した第１の実施形態について説明する。図１に、本実施形態によるマルチスレッド制御を行うサーバ／クライアントシステムを示す。
このシステムは、クライアント１０１，１０２及び１０３とサーバ２００とがネットワーク網１０４を介して接続されたシステムである。
サーバ２００は、サーバアプリケーション１０５を実行する不図示のＣＰＵを有し、記憶装置１１０が外付けされている。サーバ２００は、共有メモリ対称型マルチプロセッサ（Symmetric MultiProcessor:SMP）マシンであることが好ましいが、分散共有型マルチプロセッサマシンや大規模並列マルチプロセッサマシンであってもよい。なお、記憶装置１１０は、サーバ２００に内蔵されていても構わない。サーバアプリケーション１０５は、１〜ｎ（ｎは任意の自然数）までの複数のスレッドと輻輳情報１０９とを有する。なお、図では説明の簡略化のため、ｎ＝３の場合を例として説明するが、実際にはサーバアプリケーション上に数百から数千のスレッドが存在する。また、各スレッドは同一のロジックによって構成されており、一つのトランザクションがｎ個のスレッドによって処理される。輻輳情報１０９は、アクティブなスレッド数とＩ／Ｏ待ちでないアクティブなスレッド数とを管理するための情報である。
【００２８】
スレッド１０６は、不図示のＣＰＵが実行する処理であり、要求電文受信部１１１、輻輳情報加算部１１２、輻輳制御部１１３、業務処理部１１４、輻輳情報減算部１１８及び応答電文受信部１１９を有する。
要求電文受信部１１１は、ネットワーク網１０４からトリガを受け、要求電文を受信する機能である。換言すると、ネットワーク網１０４を介してクライアント１０１、１０２及び１０３から電文を受信する機能である。輻輳情報加算部１１２は、輻輳情報１０９内のアクティブなスレッド数を加算する機能である。輻輳制御部１１３は、輻輳情報１０９に基づいて輻輳制御を行い、過負荷になった場合、業務処理部１１４に制御を渡すことなく、エラー電文を要求元のクライアントに返却する機能である。業務処理部１１４は、要求電文に従ってファイルアクセス、更新などの処理を行う機能である。輻輳情報減算部１１８は、要求電文に対する処理の終了時にアクティブスレッド数及びＩ／Ｏ待ちでないアクティブスレッド数を減算する機能である。応答電文送信部１１９は、処理結果の応答電文を送信する機能であり、換言すると、ネットワーク網１０４を介してクライアント１０１、１０２及び１０３へ応答電文を送信する機能である。上記各部は、不図示のＣＰＵにそれぞれの機能を実現させる。
なお、スレッド１０７及びスレッド１０８はスレッド１０６と同様の構成である。
【００２９】
業務処理部１１４は、Ｉ／Ｏ時輻輳情報減算部１１５、Ｉ／Ｏ命令実行部１１６及びＩ／Ｏ時輻輳情報加算部１１７を有する。Ｉ／Ｏ時輻輳情報減算部１１５は、Ｉ／Ｏ命令の実行前に、Ｉ／Ｏ待ちでないアクティブスレッド数をデクリメントする機能である。Ｉ／Ｏ命令実行部１１６は、記憶装置１１０に対するread/write/delete 等のＩ／Ｏ命令を実行する機能である。Ｉ／Ｏ時輻輳情報加算部１１７は、Ｉ／Ｏ命令の実行完了時に、Ｉ／Ｏ待ちでないアクティブスレッドをインクリメントする機能である。業務処理部１１４内の各部も不図示のＣＰＵにそれぞれの機能を実現させる。Ｉ／Ｏ時輻輳情報減算部１１５及びＩ／Ｏ時輻輳情報加算部によって、Ｉ／Ｏ命令の期間中アクティブスレッド数はデクリメントされることとなる。
【００３０】
図２に、輻輳情報１０９のデータ構造を示す。図に示すように、輻輳情報１０９は、輻輳情報管理用ミューテックス２０１、アクティブスレッド数２０２及びＩ／Ｏ待ちでないアクティブスレッド数２０３を有する。輻輳管理ミューテックス２０１は、スレッドからの参照／更新に関する排他処理を行う。アクティブスレッド数２０２は、アクティブなスレッド（トリガ待ちでない現在処理実行中のスレッド）の数を示す。Ｉ／Ｏ待ちでないアクティブスレッド数２０３は、Ｉ／Ｏ待ちでないアクティブスレッドの数を示す。輻輳情報管理用ミューテックス２０１の実装には、スレッドの排他制御が可能なカーネルオブジェクトをＯＳに応じて用いる。例えば、ＵＮＩＸ（登録商標）の場合は、pthread ライブラリが提供するpthread ＿mutex ＿t 構造体を利用する。また、各オブジェクトの初期値は、サーバアプリケーションの起動時にユーザが任意に設定することが可能である。
【００３１】
図３〜７を用いてサーバスレッド１０５の動作の流れの一例を説明する。なお、以下の説明は、ＯＳとしてＵＮＩＸ（登録商標）を用いた場合の例である。
図３に、輻輳情報加算部１１２の動作の流れの一例を示す。輻輳情報加算部１１２は、輻輳情報１０９内の輻輳情報管理用ミューテックス２０１をpthread ＿mutex ＿t でロックする（ステップＳ３０１）。ロックによる利用権取得成功後、輻輳情報加算部１１２は、輻輳情報１０９のアクティブスレッド数２０１及びＩ／Ｏ待ちでないアクティブスレッド数をインクリメント（加算）する（ステップＳ３０２、Ｓ３０３）。輻輳情報加算部１１２は、インクリメントする際に、以降の処理に備えて不図示のメモリなどのスタック領域にアクティブスレッド数及びＩ／Ｏ待ちでないアクティブスレッド数を保持させておく。その後、輻輳情報加算部１１２は、輻輳情報１０９内の輻輳情報管理用ミューテックス２０１をpthread ＿mutex ＿t でアンロックする（ステップＳ３０４）。
【００３２】
図４に、輻輳制御部１１３の動作の流れの一例を示す。この動作例において、輻輳制御部１１３は、ＣＰＵ資源に応じた規制値ｘ、スレッド資源に応じた規制値ｙ及びサーバアプリケーション１０５が持つ業務処理を行う全スレッド数ｚに基づいて動作する。
なお、各規制値は、
規制値ｘ＜規制値ｙ＜全スレッド数ｚ
が成立するように設定する。この設定は、ライブラリの実装時に行うようにしても良いし、ユーザが任意に設定できるようにしてもよい。
【００３３】
輻輳制御部１１３は、上記スタック領域上のＩ／Ｏ待ちでないアクティブスレッド数が規制値ｘより大きいか否かを判断する（ステップＳ４０１）。スタック上のアクティブスレッド数が規制値ｘよりも小さい場合（ステップＳ４０１／Ｎｏ）、輻輳制御部１１３は、上記スタック領域上のアクティブスレッド数が規制値ｙよりも大きいか否かを判断する（ステップＳ４０２）。上記スタック領域上のアクティブスレッド数が規制値ｙよりも小さい場合（ステップＳ４０２／Ｎｏ）、輻輳制御部１１３はＣＰＵネックによる輻輳が発生しないと判断して、引き続き不図示のＣＰＵに業務処理部１１４を行わせる。
【００３４】
一方、Ｉ／Ｏ待ちでないアクティブスレッド数が規制値ｘよりも大きい場合（ステップＳ４０１／Ｙｅｓ）、または、アクティブスレッド数が規制値ｙよりも大きい場合（ステップＳ４０２／Ｙｅｓ）、輻輳制御部１１３は、エラー処理（ステップＳ４０３〜Ｓ４０７の処理）を実行する。
エラー処理実行時に輻輳制御部１１３は、クライアント１０１に対して輻輳エラーの電文を返却する（ステップＳ４０３）。次に、輻輳制御部１１３は、輻輳情報１０９の輻輳管理用ミューテックス２０１をpthread ＿mutex ＿lockでロックする（ステップＳ４０４）。ロックによる利用権取得成功後、輻輳制御部１１３は、輻輳情報１０９のアクティブスレッド数２０２及びＩ／Ｏ待ちでないアクティブスレッド数をデクリメントする（ステップＳ４０５、Ｓ４０６）。そして、輻輳制御部１１３は、輻輳情報管理用ミューテックス２０１をpthread ＿mutex ＿unlockでアンロックする（ステップＳ４０７）。
輻輳制御部１１３は、エラー処理終了後、業務処理部１１４を実行せずに処理を終了する。
【００３５】
業務処理部１１４は、要求電文の内容に応じて必要な処理を実行するサーバアプリケーション１０５本来の機能であるが、その中で記憶装置１１０に対するＩ／Ｏ処理を実行する。図５及び図６を用いて業務処理部１１４の動作を説明する。
図５に、Ｉ／Ｏ時輻輳情報減算部１１５の動作の流れの一例を示す。まず、Ｉ／Ｏ時輻輳情報減算部１１５は、輻輳情報１０９内の輻輳情報管理用ミューテックス２０１をロックする（ステップＳ５０１）。次に、Ｉ／Ｏ時輻輳情報減算部１１５は、輻輳情報１０９内のＩ／Ｏ待ちでないアクティブスレッド数２０２をデクリメントする（ステップＳ５０２）。その後、Ｉ／Ｏ時輻輳情報減算部１１５は、輻輳情報１０９内の輻輳情報管理用ミューテック２０１をアンロックする（ステップＳ５０３）。
Ｉ／Ｏ時輻輳情報減算部１１５での処理が終了すると、Ｉ／Ｏ命令実行部１１６は、記憶装置１１０に対して、read/write/delete 等のＩ／Ｏ命令を実行する。
Ｉ／Ｏ命令が完了するとＩ／Ｏ時輻輳情報加算部１１７が処理を行う。図６に、Ｉ／Ｏ時輻輳情報加算部１１７の動作の流れの一例を示す。まず。Ｉ／Ｏ時輻輳情報加算部１１７は、輻輳情報１０９内の輻輳情報管理用ミューテックス２０１をロックする（ステップＳ６０１）。次に、Ｉ／Ｏ時輻輳情報加算部１１７は、輻輳情報１０９内のＩ／Ｏ待ちでないアクティブスレッド数２０２をインクリメントする（ステップＳ６０２）。その後、Ｉ／Ｏ時輻輳情報加算部１１７は、輻輳情報１０９内の輻輳情報管理用ミューテック２０１をアンロックする（ステップＳ６０３）。
【００３６】
これにより、輻輳情報１０９内のＩ／Ｏ待ちでないスレッド数２０３は、業務処理部１１４がＣＰＵ資源を消費する間だけ輻輳制御部１１３よって＋１された状態となり、Ｉ／Ｏを実行している間は＋１されていない状態となる。これは、サーバアプリケーション１０５のうちＣＰＵ資源を消費中のスレッド数を表す数値となる。
【００３７】
業務処理部１１４が完了すると、輻輳情報減算部１１８の処理が行われる。図７に、輻輳情報減算部１１８の動作の流れの一例を示す。まず、輻輳情報減算部１１８は、輻輳情報１０９内の輻輳情報管理用ミューテックス２０１をロックする（ステップＳ７０１）。ロックによる利得権取得成功後、輻輳情報減算部１１８は、輻輳情報１０９内のアクティブスレッド数２０２及びＩ／Ｏ待ちでないアクティブスレッド数２０３をデクリメントする（ステップＳ７０２、Ｓ７０３）。そして、輻輳情報減算部１１８は、輻輳情報１０９内の輻輳情報管理用ミューテックス２０１をアンロックする（ステップＳ７０４）。
【００３８】
輻輳情報減算部１１８の動作が終了すると、応答電文送信部１１９は、正常終了時の応答電文をクライアント１０１に返却する。
サーバ２００は、クライアントからの要求を上記の動作によって処理する。
【００３９】
図８を用いて従来の輻輳制御と本実施形態による輻輳制御の違いを説明する。図に示すように、従来の輻輳制御においては、“アクティブスレッド数”のみをパラメータとして輻輳制御を行っていた。よって、Ｉ／Ｏ待ちスレッド数は、アクティブスレッド数に応じた規制値（ｙ）を基に推定値として決定せざるを得なかった。よって、Ｉ／Ｏ待ちスレッド数が予測した値よりも少なかった場合、ＣＰＵ資源が枯渇しＣＰＵネックが発生してしまう。
これに対し、本実施形態による輻輳制御では、“アクティブスレッド数”に基づいた制御に加え、業務処理部内でのＩ／Ｏ命令実行時に減算される“Ｉ／Ｏ待ちでないアクティブスレッド数”に応じた規制値（ｘ）をさらに設けている。これによって、動的に、かつ厳密に計算されたＩ／Ｏ待ちスレッド数に応じて、ＣＰＵネックが生じないように制御できる。
【００４０】
このように、本実施形態によれば、Ｉ／Ｏ待ちではないアクティブスレッド数を業務処理部内で動的にカウントすることによって、ＣＰＵ資源の枯渇をより厳密に防止できる。
【００４１】
〔第２の実施形態〕
本発明を好適に実施した第２の実施形態について説明する。本実施形態によるサーバの２００の構成は、第１の実施形態と同様であるが、輻輳制御部１１３は異なる処理を行う。
図９に、本実施形態による輻輳制御部１１３の動作の流れの一例を示す。
輻輳制御部１１３は、スタック上のアクティブスレッド数３０５からスタック上のＩ／Ｏ待ちでないアクティブスレッド数３０６を引いた数値を求める。この数値は、サーバアプリケーション１０５がＩ／Ｏ待ちをしているスレッド数を示す。輻輳制御部１１３は、この数値が規制値ｘより大きいか否かを判断する（ステップＳ９０１）。規制値ｘの方が大きい場合（ステップＳ９０１／Ｎｏ）、輻輳制御部１１３は、スタック上のアクティブスレッド数３０５が規制値ｙよりも大きいか否かを判断する（ステップＳ９０２）。規制値ｙの方が大きい場合（ステップＳ９０２／Ｎｏ）、輻輳制御部１１３は輻輳が発生しないと判断して、引き続き不図示のＣＰＵに業務処理部１１４を行わせる。
【００４２】
一方、規制値ｘの方が小さい場合（ステップＳ９０１／Ｙｅｓ）、または、規制値ｘの方が小さい場合（ステップＳ９０２／Ｙｅｓ）、輻輳制御部１１３は、エラー処理（ステップＳ９０３〜Ｓ９０７の処理）を実行する。エラー処理は、第１の実施形態と同様である。
以上の動作によって、ＣＰＵ資源の枯渇に基づくＣＰＵネックよりもＩ／Ｏネックが発生しやすいサーバにおいて、Ｉ／Ｏネックの発生を防止できる。
【００４３】
図１０を用いて、従来の輻輳制御と本実施形態による輻輳制御との違いを説明する。
図に示すように、従来の輻輳制御においては、“アクティブスレッド数”のみをパラメータとして輻輳制御を行っていた。よって、Ｉ／Ｏ待ちアクティブスレッドによる規制値は、アクティブスレッド数による規制値（ｙ）を基に推定値として決定せざるを得なかった。このため、ＣＰＵ処理スレッドが予測した値よりも少なかった場合、Ｉ／Ｏ資源が枯渇しＩ／Ｏネックが発生してしまう。
これに対し、本発明による輻輳制御では、“アクティブスレッド数”による制御に加え、業務処理部内でのＩ／Ｏ命令実行時に減算される“Ｉ／Ｏ待ちでないアクティブスレッド数”に応じた規制値（ｘ）をさらに設けている。これによって、動的に、かつ厳密に計算されたＩ／Ｏ待ちスレッド数に応じて、Ｉ／Ｏネックが生じないように制御できる。
【００４４】
なお、上記各実施形態は、本発明の好適な実施の一例であり、本発明はこれに限定されるものではない。
例えば、上記各実施形態はクライアント／サーバシステムにおけるサーバアプリケーションを例として説明を行ったが、特定のハードウエア構成に限定されるものではなく、マルチスレッド環境下のコンピュータ上で実行されるプログラムであればよい。
また、上記各実施形態では、サーバ２００の演算処理手段としてＣＰＵを例に説明したが、これに限定されることはなく、処理する情報量に応じて変更してもよい。例えば、処理する情報量が少ない場合は、ＭＰＵを適用しても良い。
あるいは、サーバ２００と各クライアントの接続は、ネットワーク網１０４を介した接続に限定されるものではない。
さらに、アクティブスレッド数やＩ／Ｏ待ちでないアクティブスレッド数を取得する方法は、上記各実施形態の方法に限定されるものではなく、他の方法を用いてもよい。
このように、本発明は、様々な変形が可能である。
【００４５】
【発明の効果】
以上の説明によって明らかなように、本発明によれば、ＣＰＵネックやＩ／Ｏネックの発生を従来よりも厳密に防止することができる。
【図面の簡単な説明】
【図１】本発明を好適に実施した第１の実施形態によるマルチスレッドプログラムが適用されたサーバアプリケーションを実行するサーバを備えたサーバ／クライアントシステムの構成を示す図である。
【図２】輻輳情報のデータ構造例を示す図である。
【図３】輻輳情報加算部の動作の流れを示すフローチャートである。
【図４】輻輳制御部の動作の流れを示すフローチャートである。
【図５】Ｉ／Ｏ時輻輳情報減算部の動作の流れを示すフローチャートである。
【図６】Ｉ／Ｏ時輻輳情報加算部の動作の流れを示すフローチャートである。
【図７】輻輳情報減算部の動作の流れを示すフローチャートである。
【図８】第１の実施形態によるサーバにおける輻輳制御と従来のサーバにおける輻輳制御との違いを示す図である。
【図９】本発明を好適に実施した第２の実施形態における輻輳制御部の動作の流れを示すフローチャートである。
【図１０】第２の実施形態によるマルチスレッドプログラムにおける輻輳制御と従来のマルチスレッドプログラムにおける輻輳制御との違いを示す図である。
【図１１】従来技術によるサーバ／クライアントシステムの構成を示す図である。
【符号の説明】
１０１、１０２、１０３  クライアント
１０４  ネットワーク網
１０５  サーバアプリケーション
１０６、１０７、１０８  スレッド
１０９  輻輳情報
１１０  記憶装置
１１１  要求電文受信部
１１２  輻輳情報加算部
１１３  輻輳制御部
１１４  業務処理部
１１５  Ｉ／Ｏ時輻輳情報減算部
１１６  Ｉ／Ｏ命令実行部
１１７  Ｉ／Ｏ時輻輳情報加算部
１１８  輻輳情報減算部
１１９  応答電文送信部
【図１】
0003932965.tif 000002
【図２】
0003932965.tif 000003
【図３】
0003932965.tif 000004
【図４】
0003932965.tif 000005
【図５】
0003932965.tif 000006
【図６】
0003932965.tif 000007
【図７】
0003932965.tif 000008
【図８】
0003932965.tif 000009
【図９】
0003932965.tif 000010
【図１０】
0003932965.tif 000011
【図１１】
0003932965.tif 000012