JP3932965B2 - マルチスレッドプログラム - Google Patents

マルチスレッドプログラム Download PDF

Info

Publication number
JP3932965B2
JP3932965B2 JP2002119762A JP2002119762A JP3932965B2 JP 3932965 B2 JP3932965 B2 JP 3932965B2 JP 2002119762 A JP2002119762 A JP 2002119762A JP 2002119762 A JP2002119762 A JP 2002119762A JP 3932965 B2 JP3932965 B2 JP 3932965B2
Authority
JP
Japan
Prior art keywords
threads
active threads
waiting
thread
job
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2002119762A
Other languages
English (en)
Other versions
JP2003316590A (ja
Inventor
光司 福田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2002119762A priority Critical patent/JP3932965B2/ja
Publication of JP2003316590A publication Critical patent/JP2003316590A/ja
Application granted granted Critical
Publication of JP3932965B2 publication Critical patent/JP3932965B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、複数のスレッドが並列に処理されるマルチスレッドプログラムに関し、特に、アクティブなスレッド数に加えI/O待ちスレッド数に基づいて、輻輳制御を行うマルチスレッドプログラムに関する。
【0002】
【従来の技術】
近年、コンピュータにおいて実行されるアプリケーションプログラムは高機能化されており、電子計算機が処理するデータ量も増加しているため、プログラムの実行速度を高速化する必要がある。
このため、コンピュータに実行させるアプリケーションプログラムをマルチスレッド化する手法が用いられる。
【0003】
マルチスレッドプログラムとは、コンピュータに実行させる処理をスレッドと呼ばれる最小単位に分割して要求し、各スレッドごとにコンピュータに実行させるプログラムである。一つのアプリケーションの処理を複数のスレッドに分けて実行すれば処理効率を向上できるため、プログラムのマルチスレッド化は、コンピュータシステムにおいてアプリケーションの実行速度を向上させる手法の一つとして用いられている。
マルチスレッドのアプリケーションプログラムは、CPUの処理時間を非常に短い単位に分割し、複数のスレッドに順番に割り当てることによって、複数の処理を同時に行っているようにみせている。
【0004】
マルチスレッドプログラムにおいては、プログラムを実行させるコンピュータのCPU資源やI/O資源にトランザクション量が集中するとCPU資源やI/O資源が枯渇してしまうことがあるため、所定量以上のトランザクションが集中しないように制御を行う必要がある。
なお、本明細書中においては、CPU資源やI/O資源にトランザクション量が集中することを「輻輳」と、所定量以上のトランザクションが集中しないように制御することを「輻輳制御」と表現する。
【0005】
例えば、マルチスレッド環境下のサーバ/クライアントシステムにおいては、サーバのリソースやスレッドの枯渇を防止するために輻輳制御を行い、一定数のトランザクション以上は同時に処理しないようにする必要がある。
【0006】
図11を用いて、従来のマルチスレッドプログラムにおける輻輳制御を説明する。
このサーバ/クライアントシステムは、クライアント1101、1102及び1103とサーバ2000とがネットワーク網1104を介して接続されたシステムである。
サーバ2000は、サーバアプリケーション1105を実行する不図示のCPUを有し、記憶装置1110が外付けされている。サーバアプリケーション1105は、1〜nまでの複数のスレッド(図は、n=3の場合)と輻輳情報1109とを備える。輻輳情報1109は、アクティブなスレッド数を管理するための情報である。
スレッド1106は、不図示のCPUが実行する処理であり、要求電文受信部1111、輻輳情報加算部1112、輻輳制御部1113、業務処理部1114、輻輳情報減算部1115及び応答電文受信部1116を有する。
要求電文受信部1111は、ネットワーク網1104を介してクライアント1101、1102及び1103から電文を受信する機能である。なお、「電文」とは、所定の通信プロトコルに従って送受信される固定長又は可変長のデータである。輻輳情報加算部1112は、輻輳情報1109内のアクティブなスレッド数をインクリメントする機能である。輻輳制御部1113は、輻輳情報109を基に、一定数以上のトランザクションを同時に処理しないように制御する機能である。業務処理部1114は、クライアントから要求された処理を実行する機能である。輻輳情報減算部1115は、輻輳情報1109内のアクティブなスレッド数をデクリメントする機能である。応答電文送信部1116は、ネットワーク網1104を介してクライアント1101、1102及び1103へ電文を送信する機能である。上記各部は、不図示のCPUにそれぞれの機能を実現させる。なお、スレッド1107及びスレッド1108はスレッド1106と同様の構成である。
【0007】
不図示のCPUがスレッド106を実行する場合、サーバアプリケーション1105は、業務処理部1114を実行する前後に輻輳情報加算部1112及び輻輳情報減算部1115を用いて輻輳情報1109内のアクティブスレッド数を管理し、スレッドを実行するか否かを輻輳制御部1113が輻輳情報1109内のアクティブスレッド数に基づいて判断することによってマルチスレッド制御を行っていた。
【0008】
【発明が解決しようとする課題】
しかし、従来のマルチスレッド制御では、サーバアプリケーション1105内のスレッドの枯渇とスレッドを実行する不図示のCPUのネックとを単一のアクティブスレッド数から成る輻輳情報で制御していたため、CPUネックやI/Oネックを十分に防止することができなかった。
【0009】
本発明はかかる問題に鑑みてなされたものであり、CPUネックやI/Oネックの発生をより厳密に防止することを目的とする。
【0010】
【課題を解決するための手段】
上記目的を達成するため、本発明は、第1の態様として、コンピュータのオペレーションシステム上において複数のスレッド並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、I/O待ちでないアクティブなスレッド数を取得する工程と、I/O待ちでないアクティブなスレッド数がコンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する工程と、I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、コンピュータのI/O資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのI/O資源が枯渇すると判断する工程と、演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【0011】
また、上記目的を達成するため、本発明は、第2の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、アクティブなスレッドの総数からI/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるI/O待ちのアクティブなスレッド数がコンピュータのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのI/O資源が枯渇すると判断する工程と、アクティブなスレッドの総数が、コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する工程と、演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【0012】
また、上記目的を達成するため、本発明は、第3の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、I/O待ちでないアクティブなスレッド数を取得する工程と、I/O待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第3の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値xと、I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数zとの間に、x<y<zの関係が成り立つことが好ましい。
【0013】
また、上記目的を達成するため、本発明は、第4の態様として、コンピュータのオペレーションシステム上において複数のスレッド並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータに、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、アクティブなスレッドのからI/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるI/O待ちのアクティブなスレッド数が、当該コンピュータのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第4の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値と、I/O資源に基づいて設定される閾値と、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数との間に、の関係が成り立つことが好ましい。
【0014】
また、上記目的を達成するため、本発明は、第5の態様として、コンピュータのオペレーションシステム上において複数のスレッド並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちI/O待ちでないアクティブなスレッド数を取得する手段と、I/O待ちでないアクティブなスレッド数がコンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する手段と、アクティブなスレッドがコンピュータのI/O資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのI/O資源が枯渇すると判断する手段と、演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【0015】
また、上記目的を達成するため、本発明は、第6の態様として、コンピュータのオペレーションシステム上において複数のスレッド並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、アクティブなスレッドの総からI/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるI/O待ちのアクティブなスレッド数がコンピュータのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのI/O資源が枯渇すると判断する手段と、アクティブなスレッドの総コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇する判断する手段と、演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【0016】
また、上記目的を達成するため、本発明は、第7の態様として、コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、I/O待ちでないアクティブなスレッド数を取得する手段と、I/O待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第7の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値xと、I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数zとの間に、x<y<zの関係が成り立つことが好ましい。
【0017】
また、上記目的を達成するため、本発明は、第8の態様として、コンピュータのオペレーションシステム上において複数のスレッド並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、各スレッドは、コンピュータを、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、アクティブなスレッドの総からI/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるI/O待ちのアクティブなスレッド数が、当該コンピュータのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第8の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値と、I/O資源に基づいて設定される閾値と、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数との間に、の関係が成り立つことが好ましい。
【0018】
また、上記目的を達成するため、本発明は、第9の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、I/O待ちでないアクティブなスレッド数を取得する工程と、I/O待ちでないアクティブなスレッド数がサーバの演算手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する工程と、I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、サーバのI/O資源に基づいて予め設定される閾値を超える場合に、当該サーバのI/O資源が枯渇すると判断する工程と、当該演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【0019】
また、上記目的を達成するため、本発明は、第10の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、アクティブなスレッドの総数からI/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるI/O待ちのアクティブなスレッド数がサーバのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのI/O資源が枯渇すると判断する工程と、アクティブなスレッドの総数が、サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇すると判断する工程と、演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。
【0020】
また、上記目的を達成するため、本発明は、第11の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、I/O待ちでないアクティブなスレッド数を取得する工程と、I/O待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、アクティブなスレッドの総数が、当該演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第11の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値xと、I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数zとの間に、x<y<zの関係が成り立つことが好ましい。
【0021】
また、上記目的を達成するため、本発明は、第12の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段に、クライアントからジョブを実行するためのタスクの処理要求を取得する工程と、アクティブなスレッドの総数を取得する工程と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、アクティブなスレッドの総からI/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、算出工程における演算結果であるI/O待ちのアクティブなスレッド数が、当該サーバのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、業務処理工程において処理されたデータをジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第12の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値と、I/O資源に基づいて設定される閾値と、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数との間に、の関係が成り立つことが好ましい。
【0022】
また、上記目的を達成するため、本発明は、第13の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブの処理要求を取得する手段と、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちI/O待ちでないアクティブなスレッド数を取得する手段と、I/O待ちでないアクティブなスレッド数がサーバの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する手段と、アクティブなスレッド数がサーバのI/O資源に基づいて予め設定される閾値を超える場合に、当該サーバのI/O資源が枯渇すると判断する手段と、当該演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【0023】
また、上記目的を達成するため、本発明は、第14の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブを実行するためのタスクの処理要求を取得する手段と、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、アクティブなスレッドの総数からI/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるI/O待ちのアクティブなスレッド数がサーバのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのI/O資源が枯渇すると判断する手段と、アクティブなスレッドの総数が、サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇するか否かを判断する手段と、演算処理手段のハードウエア資源及びI/O資源のいずれも枯渇しないと判断した場合、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。
【0024】
また、上記目的を達成するため、本発明は、第15の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブを実行するためのタスクの処理要求を取得する手段と、I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、I/O待ちでないアクティブなスレッド数を取得する手段と、I/O待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、アクティブなスレッドの総数が、当該演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第15の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値xと、I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数zとの間に、x<y<zの関係が成り立つことが好ましい。
【0025】
また、上記目的を達成するため、本発明は、第16の態様として、少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されてクライアントから要求されたジョブを実行するマルチスレッドプログラムであって、各スレッドは、サーバの演算処理手段を、クライアントからジョブを実行するためのタスクの処理要求を取得する手段と、アクティブなスレッドの総数を取得する手段と、アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、アクティブなスレッドの総からI/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、算出手段の演算結果であるI/O待ちのアクティブなスレッド数が、当該サーバのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合に、ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、業務処理手段が処理したデータをジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラムを提供するものである。上記本発明の第16の態様において、演算処理手段のハードウエア資源に基づいて設定される閾値と、I/O資源に基づいて設定される閾値と、当該マルチスレッドプログラムがジョブを実行するために生成する全スレッド数との間に、の関係が成り立つことが好ましい。
【0026】
〔作用〕
本発明によるマルチスレッドプログラムは、CPU処理中のスレッドの数とI/O待ちのスレッドの数とを別個にカウントし、それぞれの値に基づいて輻輳制御を実行する。これによって、従来よりも厳密にCPUネックやI/Oネックによる輻輳を防止できる。
【0027】
【発明の実施の形態】
〔第1の実施形態〕
本発明を好適に実施した第1の実施形態について説明する。図1に、本実施形態によるマルチスレッド制御を行うサーバ/クライアントシステムを示す。
このシステムは、クライアント101,102及び103とサーバ200とがネットワーク網104を介して接続されたシステムである。
サーバ200は、サーバアプリケーション105を実行する不図示のCPUを有し、記憶装置110が外付けされている。サーバ200は、共有メモリ対称型マルチプロセッサ(Symmetric MultiProcessor:SMP)マシンであることが好ましいが、分散共有型マルチプロセッサマシンや大規模並列マルチプロセッサマシンであってもよい。なお、記憶装置110は、サーバ200に内蔵されていても構わない。サーバアプリケーション105は、1〜n(nは任意の自然数)までの複数のスレッドと輻輳情報109とを有する。なお、図では説明の簡略化のため、n=3の場合を例として説明するが、実際にはサーバアプリケーション上に数百から数千のスレッドが存在する。また、各スレッドは同一のロジックによって構成されており、一つのトランザクションがn個のスレッドによって処理される。輻輳情報109は、アクティブなスレッド数とI/O待ちでないアクティブなスレッド数とを管理するための情報である。
【0028】
スレッド106は、不図示のCPUが実行する処理であり、要求電文受信部111、輻輳情報加算部112、輻輳制御部113、業務処理部114、輻輳情報減算部118及び応答電文受信部119を有する。
要求電文受信部111は、ネットワーク網104からトリガを受け、要求電文を受信する機能である。換言すると、ネットワーク網104を介してクライアント101、102及び103から電文を受信する機能である。輻輳情報加算部112は、輻輳情報109内のアクティブなスレッド数を加算する機能である。輻輳制御部113は、輻輳情報109に基づいて輻輳制御を行い、過負荷になった場合、業務処理部114に制御を渡すことなく、エラー電文を要求元のクライアントに返却する機能である。業務処理部114は、要求電文に従ってファイルアクセス、更新などの処理を行う機能である。輻輳情報減算部118は、要求電文に対する処理の終了時にアクティブスレッド数及びI/O待ちでないアクティブスレッド数を減算する機能である。応答電文送信部119は、処理結果の応答電文を送信する機能であり、換言すると、ネットワーク網104を介してクライアント101、102及び103へ応答電文を送信する機能である。上記各部は、不図示のCPUにそれぞれの機能を実現させる。
なお、スレッド107及びスレッド108はスレッド106と同様の構成である。
【0029】
業務処理部114は、I/O時輻輳情報減算部115、I/O命令実行部116及びI/O時輻輳情報加算部117を有する。I/O時輻輳情報減算部115は、I/O命令の実行前に、I/O待ちでないアクティブスレッド数をデクリメントする機能である。I/O命令実行部116は、記憶装置110に対するread/write/delete 等のI/O命令を実行する機能である。I/O時輻輳情報加算部117は、I/O命令の実行完了時に、I/O待ちでないアクティブスレッドをインクリメントする機能である。業務処理部114内の各部も不図示のCPUにそれぞれの機能を実現させる。I/O時輻輳情報減算部115及びI/O時輻輳情報加算部によって、I/O命令の期間中アクティブスレッド数はデクリメントされることとなる。
【0030】
図2に、輻輳情報109のデータ構造を示す。図に示すように、輻輳情報109は、輻輳情報管理用ミューテックス201、アクティブスレッド数202及びI/O待ちでないアクティブスレッド数203を有する。輻輳管理ミューテックス201は、スレッドからの参照/更新に関する排他処理を行う。アクティブスレッド数202は、アクティブなスレッド(トリガ待ちでない現在処理実行中のスレッド)の数を示す。I/O待ちでないアクティブスレッド数203は、I/O待ちでないアクティブスレッドの数を示す。輻輳情報管理用ミューテックス201の実装には、スレッドの排他制御が可能なカーネルオブジェクトをOSに応じて用いる。例えば、UNIX(登録商標)の場合は、pthread ライブラリが提供するpthread _mutex _t 構造体を利用する。また、各オブジェクトの初期値は、サーバアプリケーションの起動時にユーザが任意に設定することが可能である。
【0031】
図3〜7を用いてサーバスレッド105の動作の流れの一例を説明する。なお、以下の説明は、OSとしてUNIX(登録商標)を用いた場合の例である。
図3に、輻輳情報加算部112の動作の流れの一例を示す。輻輳情報加算部112は、輻輳情報109内の輻輳情報管理用ミューテックス201をpthread _mutex _t でロックする(ステップS301)。ロックによる利用権取得成功後、輻輳情報加算部112は、輻輳情報109のアクティブスレッド数201及びI/O待ちでないアクティブスレッド数をインクリメント(加算)する(ステップS302、S303)。輻輳情報加算部112は、インクリメントする際に、以降の処理に備えて不図示のメモリなどのスタック領域にアクティブスレッド数及びI/O待ちでないアクティブスレッド数を保持させておく。その後、輻輳情報加算部112は、輻輳情報109内の輻輳情報管理用ミューテックス201をpthread _mutex _t でアンロックする(ステップS304)。
【0032】
図4に、輻輳制御部113の動作の流れの一例を示す。この動作例において、輻輳制御部113は、CPU資源に応じた規制値x、スレッド資源に応じた規制値y及びサーバアプリケーション105が持つ業務処理を行う全スレッド数zに基づいて動作する。
なお、各規制値は、
規制値x<規制値y<全スレッド数z
が成立するように設定する。この設定は、ライブラリの実装時に行うようにしても良いし、ユーザが任意に設定できるようにしてもよい。
【0033】
輻輳制御部113は、上記スタック領域上のI/O待ちでないアクティブスレッド数が規制値xより大きいか否かを判断する(ステップS401)。スタック上のアクティブスレッド数が規制値xよりも小さい場合(ステップS401/No)、輻輳制御部113は、上記スタック領域上のアクティブスレッド数が規制値yよりも大きいか否かを判断する(ステップS402)。上記スタック領域上のアクティブスレッド数が規制値yよりも小さい場合(ステップS402/No)、輻輳制御部113はCPUネックによる輻輳が発生しないと判断して、引き続き不図示のCPUに業務処理部114を行わせる。
【0034】
一方、I/O待ちでないアクティブスレッド数が規制値xよりも大きい場合(ステップS401/Yes)、または、アクティブスレッド数が規制値yよりも大きい場合(ステップS402/Yes)、輻輳制御部113は、エラー処理(ステップS403〜S407の処理)を実行する。
エラー処理実行時に輻輳制御部113は、クライアント101に対して輻輳エラーの電文を返却する(ステップS403)。次に、輻輳制御部113は、輻輳情報109の輻輳管理用ミューテックス201をpthread _mutex _lockでロックする(ステップS404)。ロックによる利用権取得成功後、輻輳制御部113は、輻輳情報109のアクティブスレッド数202及びI/O待ちでないアクティブスレッド数をデクリメントする(ステップS405、S406)。そして、輻輳制御部113は、輻輳情報管理用ミューテックス201をpthread _mutex _unlockでアンロックする(ステップS407)。
輻輳制御部113は、エラー処理終了後、業務処理部114を実行せずに処理を終了する。
【0035】
業務処理部114は、要求電文の内容に応じて必要な処理を実行するサーバアプリケーション105本来の機能であるが、その中で記憶装置110に対するI/O処理を実行する。図5及び図6を用いて業務処理部114の動作を説明する。
図5に、I/O時輻輳情報減算部115の動作の流れの一例を示す。まず、I/O時輻輳情報減算部115は、輻輳情報109内の輻輳情報管理用ミューテックス201をロックする(ステップS501)。次に、I/O時輻輳情報減算部115は、輻輳情報109内のI/O待ちでないアクティブスレッド数202をデクリメントする(ステップS502)。その後、I/O時輻輳情報減算部115は、輻輳情報109内の輻輳情報管理用ミューテック201をアンロックする(ステップS503)。
I/O時輻輳情報減算部115での処理が終了すると、I/O命令実行部116は、記憶装置110に対して、read/write/delete 等のI/O命令を実行する。
I/O命令が完了するとI/O時輻輳情報加算部117が処理を行う。図6に、I/O時輻輳情報加算部117の動作の流れの一例を示す。まず。I/O時輻輳情報加算部117は、輻輳情報109内の輻輳情報管理用ミューテックス201をロックする(ステップS601)。次に、I/O時輻輳情報加算部117は、輻輳情報109内のI/O待ちでないアクティブスレッド数202をインクリメントする(ステップS602)。その後、I/O時輻輳情報加算部117は、輻輳情報109内の輻輳情報管理用ミューテック201をアンロックする(ステップS603)。
【0036】
これにより、輻輳情報109内のI/O待ちでないスレッド数203は、業務処理部114がCPU資源を消費する間だけ輻輳制御部113よって+1された状態となり、I/Oを実行している間は+1されていない状態となる。これは、サーバアプリケーション105のうちCPU資源を消費中のスレッド数を表す数値となる。
【0037】
業務処理部114が完了すると、輻輳情報減算部118の処理が行われる。図7に、輻輳情報減算部118の動作の流れの一例を示す。まず、輻輳情報減算部118は、輻輳情報109内の輻輳情報管理用ミューテックス201をロックする(ステップS701)。ロックによる利得権取得成功後、輻輳情報減算部118は、輻輳情報109内のアクティブスレッド数202及びI/O待ちでないアクティブスレッド数203をデクリメントする(ステップS702、S703)。そして、輻輳情報減算部118は、輻輳情報109内の輻輳情報管理用ミューテックス201をアンロックする(ステップS704)。
【0038】
輻輳情報減算部118の動作が終了すると、応答電文送信部119は、正常終了時の応答電文をクライアント101に返却する。
サーバ200は、クライアントからの要求を上記の動作によって処理する。
【0039】
図8を用いて従来の輻輳制御と本実施形態による輻輳制御の違いを説明する。図に示すように、従来の輻輳制御においては、“アクティブスレッド数”のみをパラメータとして輻輳制御を行っていた。よって、I/O待ちスレッド数は、アクティブスレッド数に応じた規制値(y)を基に推定値として決定せざるを得なかった。よって、I/O待ちスレッド数が予測した値よりも少なかった場合、CPU資源が枯渇しCPUネックが発生してしまう。
これに対し、本実施形態による輻輳制御では、“アクティブスレッド数”に基づいた制御に加え、業務処理部内でのI/O命令実行時に減算される“I/O待ちでないアクティブスレッド数”に応じた規制値(x)をさらに設けている。これによって、動的に、かつ厳密に計算されたI/O待ちスレッド数に応じて、CPUネックが生じないように制御できる。
【0040】
このように、本実施形態によれば、I/O待ちではないアクティブスレッド数を業務処理部内で動的にカウントすることによって、CPU資源の枯渇をより厳密に防止できる。
【0041】
〔第2の実施形態〕
本発明を好適に実施した第2の実施形態について説明する。本実施形態によるサーバの200の構成は、第1の実施形態と同様であるが、輻輳制御部113は異なる処理を行う。
図9に、本実施形態による輻輳制御部113の動作の流れの一例を示す。
輻輳制御部113は、スタック上のアクティブスレッド数305からスタック上のI/O待ちでないアクティブスレッド数306を引いた数値を求める。この数値は、サーバアプリケーション105がI/O待ちをしているスレッド数を示す。輻輳制御部113は、この数値が規制値xより大きいか否かを判断する(ステップS901)。規制値xの方が大きい場合(ステップS901/No)、輻輳制御部113は、スタック上のアクティブスレッド数305が規制値yよりも大きいか否かを判断する(ステップS902)。規制値yの方が大きい場合(ステップS902/No)、輻輳制御部113は輻輳が発生しないと判断して、引き続き不図示のCPU業務処理部114を行わせる。
【0042】
一方、規制値xの方が小さい場合(ステップS901/Yes)、または、規制値xの方が小さい場合(ステップS902/Yes)、輻輳制御部113は、エラー処理(ステップS903〜S907の処理)を実行する。エラー処理は、第1の実施形態と同様である。
以上の動作によって、CPU資源の枯渇に基づくCPUネックよりもI/Oネックが発生しやすいサーバにおいて、I/Oネックの発生を防止できる。
【0043】
図10を用いて、従来の輻輳制御と本実施形態による輻輳制御との違いを説明する。
図に示すように、従来の輻輳制御においては、“アクティブスレッド数”のみをパラメータとして輻輳制御を行っていた。よって、I/O待ちアクティブスレッドによる規制値は、アクティブスレッド数による規制値(y)を基に推定値として決定せざるを得なかった。このため、CPU処理スレッドが予測した値よりも少なかった場合、I/O資源が枯渇しI/Oネックが発生してしまう。
これに対し、本発明による輻輳制御では、“アクティブスレッド数”による制御に加え、業務処理部内でのI/O命令実行時に減算される“I/O待ちでないアクティブスレッド数”に応じた規制値(x)をさらに設けている。これによって、動的に、かつ厳密に計算されたI/O待ちスレッド数に応じて、I/Oネックが生じないように制御できる。
【0044】
なお、上記各実施形態は、本発明の好適な実施の一例であり、本発明はこれに限定されるものではない。
例えば、上記各実施形態はクライアント/サーバシステムにおけるサーバアプリケーションを例として説明を行ったが、特定のハードウエア構成に限定されるものではなく、マルチスレッド環境下のコンピュータ上で実行されるプログラムであればよい。
また、上記各実施形態では、サーバ200の演算処理手段としてCPUを例に説明したが、これに限定されることはなく、処理する情報量に応じて変更してもよい。例えば、処理する情報量が少ない場合は、MPUを適用しても良い。
あるいは、サーバ200と各クライアントの接続は、ネットワーク網104を介した接続に限定されるものではない。
さらに、アクティブスレッド数やI/O待ちでないアクティブスレッド数を取得する方法は、上記各実施形態の方法に限定されるものではなく、他の方法を用いてもよい。
このように、本発明は、様々な変形が可能である。
【0045】
【発明の効果】
以上の説明によって明らかなように、本発明によれば、CPUネックやI/Oネックの発生を従来よりも厳密に防止することができる。
【図面の簡単な説明】
【図1】本発明を好適に実施した第1の実施形態によるマルチスレッドプログラムが適用されたサーバアプリケーションを実行するサーバを備えたサーバ/クライアントシステムの構成を示す図である。
【図2】輻輳情報のデータ構造例を示す図である。
【図3】輻輳情報加算部の動作の流れを示すフローチャートである。
【図4】輻輳制御部の動作の流れを示すフローチャートである。
【図5】I/O時輻輳情報減算部の動作の流れを示すフローチャートである。
【図6】I/O時輻輳情報加算部の動作の流れを示すフローチャートである。
【図7】輻輳情報減算部の動作の流れを示すフローチャートである。
【図8】第1の実施形態によるサーバにおける輻輳制御と従来のサーバにおける輻輳制御との違いを示す図である。
【図9】本発明を好適に実施した第2の実施形態における輻輳制御部の動作の流れを示すフローチャートである。
【図10】第2の実施形態によるマルチスレッドプログラムにおける輻輳制御と従来のマルチスレッドプログラムにおける輻輳制御との違いを示す図である。
【図11】従来技術によるサーバ/クライアントシステムの構成を示す図である。
【符号の説明】
101、102、103 クライアント
104 ネットワーク網
105 サーバアプリケーション
106、107、108 スレッド
109 輻輳情報
110 記憶装置
111 要求電文受信部
112 輻輳情報加算部
113 輻輳制御部
114 業務処理部
115 I/O時輻輳情報減算部
116 I/O命令実行部
117 I/O時輻輳情報加算部
118 輻輳情報減算部
119 応答電文送信部

Claims (24)

  1. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータに、
    I/O待ちでないアクティブなスレッド数を取得する工程と、
    前記I/O待ちでないアクティブなスレッド数が前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する工程と、
    前記I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドの総数が、前記コンピュータのI/O資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのI/O資源が枯渇すると判断する工程と、
    前記演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  2. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータに、
    アクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、
    前記アクティブなスレッドの総数から前記I/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、
    前記算出工程における演算結果である前記I/O待ちのアクティブなスレッド数が前記コンピュータのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのI/O資源が枯渇すると判断する工程と、
    前記アクティブなスレッドの総数が、前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する工程と、
    前記演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  3. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータに、
    I/O待ちでないアクティブなスレッド数を取得する工程と、
    前記I/O待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、
    前記I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、
    前記第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  4. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    x<y<z
    の関係が成り立つことを特徴とする請求項3記載のマルチスレッドプログラム。
  5. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータに、
    アクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、
    前記アクティブなスレッドの総数から前記I/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、
    前記算出工程における演算結果である前記I/O待ちのアクティブなスレッド数が、当該コンピュータのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、
    前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、
    前記第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  6. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを処理するために生成する全スレッド数zとの間に、
    y<x<z
    の関係が成り立つことを特徴とする請求項5記載のマルチスレッドプログラム。
  7. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータを、
    アクティブなスレッドの総数を取得する手段と、
    前記アクティブなスレッドのうちI/O待ちでないアクティブなスレッド数を取得する手段と、
    前記I/O待ちでないアクティブなスレッド数が前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該コンピュータのハードウエア資源が枯渇すると判断する手段と、
    前記アクティブなスレッド総数が前記コンピュータのI/O資源に基づいて予め設定される閾値を超える場合に、当該コンピュータのI/O資源が枯渇すると判断する手段と、
    前記演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  8. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータを、
    アクティブなスレッドの総数を取得する手段と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、
    前記アクティブなスレッドの総数から前記I/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、
    前記算出手段の演算結果である前記I/O待ちのアクティブなスレッド数が前記コンピュータのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータのI/O資源が枯渇すると判断する手段と、
    前記アクティブなスレッドの総数が、前記コンピュータの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該コンピュータの演算処理手段のハードウエア資源が枯渇すると判断する手段と、
    前記演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  9. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータを、
    I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、
    前記I/O待ちでないアクティブなスレッド数を取得する手段と、
    前記I/O待ちでないアクティブなスレッド数が、当該コンピュータのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、
    前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、
    前記第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  10. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    x<y<z
    の関係が成り立つことを特徴とする請求項9記載のマルチスレッドプログラム。
  11. コンピュータのオペレーションシステム上において複数のスレッドが並列に処理されて所定のジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、前記コンピュータを、
    アクティブなスレッドの総数を取得する手段と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、
    前記アクティブなスレッドの総数から前記I/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、
    前記算出手段の演算結果である前記I/O待ちのアクティブなスレッド数が、当該コンピュータのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、
    前記アクティブなスレッドの総数が、当該コンピュータの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、
    前記第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  12. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    y<x<z
    の関係が成り立つことを特徴とする請求項11記載のマルチスレッドプログラム。
  13. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段に、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
    I/O待ちでないアクティブなスレッド数を取得する工程と、
    前記I/O待ちでないアクティブなスレッド数が前記サーバの演算手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する工程と、
    前記I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との合計であるアクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドの総数が、前記サーバのI/O資源に基づいて予め設定される閾値を超える場合に、当該サーバのI/O資源が枯渇すると判断する工程と、
    当該演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
    前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  14. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段に、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
    アクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、
    前記アクティブなスレッドの総数から前記I/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、
    前記算出工程における演算結果である前記I/O待ちのアクティブなスレッド数が前記サーバのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのI/O資源が枯渇すると判断する工程と、
    前記アクティブなスレッドの総数が、前記サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇すると判断する工程と、
    前記演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
    前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  15. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段に、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
    I/O待ちでないアクティブなスレッド数を取得する工程と、
    前記I/O待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、
    前記I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドの総数が、当該演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、
    前記第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
    前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  16. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    x<y<z
    の関係が成り立つことを特徴とする請求項15記載のマルチスレッドプログラム。
  17. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段に、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する工程と、
    アクティブなスレッドの総数を取得する工程と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する工程と、
    前記アクティブなスレッドの総数から前記I/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出工程と、
    前記算出工程における演算結果である前記I/O待ちのアクティブなスレッド数が、当該サーバのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断工程と、
    前記アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断工程と、
    前記第1及び第2の判断工程のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理工程と、
    前記業務処理工程において処理されたデータを前記ジョブの処理要求の送信元であるクライアントへ送信する工程と、を実行させることを特徴とするマルチスレッドプログラム。
  18. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    y<x<z
    の関係が成り立つことを特徴とする請求項17記載のマルチスレッドプログラム。
  19. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段を、
    前記クライアントから前記ジョブの処理要求を取得する手段と、
    アクティブなスレッドの総数を取得する手段と、
    前記アクティブなスレッドのうちI/O待ちでないアクティブなスレッド数を取得する手段と、
    前記I/O待ちでないアクティブなスレッド数が前記サーバの演算処理手段のハードウエア資源に基づいて予め設定された閾値を超える場合に、当該サーバのハードウエア資源が枯渇すると判断する手段と、
    前記アクティブなスレッド数が前記サーバのI/O資源に基づいて予め設定される閾値を超える場合に、当該サーバのI/O資源が枯渇すると判断する手段と、
    当該演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
    前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  20. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段を、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する手段と、
    アクティブなスレッドの総数を取得する手段と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、
    前記アクティブなスレッドの総数から前記I/O待ちでないアクティブなスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、
    前記算出手段の演算結果である前記I/O待ちのアクティブなスレッド数が前記サーバのI/O資源に基づいて予め設定される閾値よりも大きい場合に、当該サーバのI/O資源が枯渇すると判断する手段と、
    前記アクティブなスレッドの総数が、前記サーバの演算処理手段のハードウエア資源に基づいて予め設定される閾値よりも大きい場合に、当該演算処理手段のハードウエア資源が枯渇するか否かを判断する手段と、
    前記演算処理手段のハードウエア資源及び前記I/O資源のいずれも枯渇しないと判断した場合、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
    前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  21. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段を、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する手段と、
    I/O待ちでないアクティブなスレッド数とI/O待ちのアクティブなスレッド数との総計であるアクティブなスレッドの総数を取得する手段と、
    前記I/O待ちでないアクティブなスレッド数を取得する手段と、
    前記I/O待ちでないアクティブなスレッド数が、当該サーバのハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、
    前記アクティブなスレッドの総数が、当該演算処理手段のI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、
    前記第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
    前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  22. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    x<y<z
    の関係が成り立つことを特徴とする請求項21記載のマルチスレッドプログラム。
  23. 少なくとも一つのクライアントが接続されるサーバのオペレーションシステム上において複数のスレッドが並列に処理されて前記クライアントから要求されたジョブを実行するマルチスレッドプログラムであって、
    各スレッドは、サーバの演算処理手段を、
    前記クライアントから前記ジョブを実行するためのタスクの処理要求を取得する手段と、
    アクティブなスレッドの総数を取得する手段と、
    前記アクティブなスレッドのうちI/O待ちでないスレッド数を取得する手段と、
    前記アクティブなスレッドの総数から前記I/O待ちでないスレッド数を減算することによってI/O待ちのアクティブなスレッド数を算出する算出手段と、
    前記算出手段の演算結果である前記I/O待ちのアクティブなスレッド数が、当該サーバのI/O資源に基づいて予め設定された閾値を超えるか否かを判断する第1の判断手段と、
    前記アクティブなスレッドの総数が、当該演算処理手段のハードウエア資源に基づいて予め設定された閾値を超えるか否かを判断する第2の判断手段と、
    前記第1及び第2の判断手段のいずれにおいても閾値以下であると判断された場合に、前記ジョブを実行するために当該スレッドに割り当てられたタスクを処理する業務処理手段と、
    前記業務処理手段が処理したデータを前記ジョブの処理要求の送信元であるクライアントへ送信する手段と、として機能させることを特徴とするマルチスレッドプログラム。
  24. 前記演算処理手段のハードウエア資源に基づいて設定される閾値xと、前記I/O資源に基づいて設定される閾値yと、当該マルチスレッドプログラムが前記ジョブを実行するために生成する全スレッド数zとの間に、
    y<x<z
    の関係が成り立つことを特徴とする請求項23記載のマルチスレッドプログラム。
JP2002119762A 2002-04-22 2002-04-22 マルチスレッドプログラム Expired - Fee Related JP3932965B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002119762A JP3932965B2 (ja) 2002-04-22 2002-04-22 マルチスレッドプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002119762A JP3932965B2 (ja) 2002-04-22 2002-04-22 マルチスレッドプログラム

Publications (2)

Publication Number Publication Date
JP2003316590A JP2003316590A (ja) 2003-11-07
JP3932965B2 true JP3932965B2 (ja) 2007-06-20

Family

ID=29536221

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002119762A Expired - Fee Related JP3932965B2 (ja) 2002-04-22 2002-04-22 マルチスレッドプログラム

Country Status (1)

Country Link
JP (1) JP3932965B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103885837A (zh) * 2014-03-18 2014-06-25 上海大唐移动通信设备有限公司 一种多线程处理数据的方法及装置

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5298974B2 (ja) * 2009-03-10 2013-09-25 株式会社リコー 機器管理装置、機器管理システム、機器管理方法、機器管理プログラム、及びそのプログラムを記録した記録媒体
CN110781244B (zh) * 2014-12-03 2023-06-13 阿里巴巴集团控股有限公司 用于对数据库的并发操作进行控制的方法及装置
CN111475387A (zh) * 2019-01-24 2020-07-31 阿里巴巴集团控股有限公司 一种服务器过载判断方法及服务器

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103885837A (zh) * 2014-03-18 2014-06-25 上海大唐移动通信设备有限公司 一种多线程处理数据的方法及装置
CN103885837B (zh) * 2014-03-18 2017-07-14 上海大唐移动通信设备有限公司 一种多线程处理数据的方法及装置

Also Published As

Publication number Publication date
JP2003316590A (ja) 2003-11-07

Similar Documents

Publication Publication Date Title
JP7327744B2 (ja) ファンクションアズアサービス(FaaS)システムの強化
Qin et al. Arachne:{Core-Aware} thread management
Daglis et al. RPCValet: NI-driven tail-aware balancing of µs-scale RPCs
US7900210B2 (en) Application connector parallelism in enterprise application integration systems
Khalid et al. Iron: Isolating network-based {CPU} in container environments
Almeida et al. Providing differentiated levels of service in web content hosting
Jeffay et al. Proportional share scheduling of operating system services for real-time applications
Hedayati et al. {Multi-Queue} Fair Queuing
US9875141B2 (en) Managing pools of dynamic resources
US20130081039A1 (en) Resource allocation using entitlements
US20120297216A1 (en) Dynamically selecting active polling or timed waits
US20130081043A1 (en) Resource allocation using entitlement hints
JP2019535072A (ja) 複数の購読者にメッセージを提供するためのシステム及び方法
US20120042327A1 (en) Method and System for Event-Based Remote Procedure Call Implementation in a Distributed Computing System
US20140068165A1 (en) Splitting a real-time thread between the user and kernel space
US20220171652A1 (en) Distributed container image construction scheduling system and method
US20140245308A1 (en) System and method for scheduling jobs in a multi-core processor
CN114598658A (zh) 一种流量限制方法及装置
Huh et al. Cross‐layer resource control and scheduling for improving interactivity in Android
Liu et al. Beyond mpi: New communication interfaces for database systems and data-intensive applications
US20140173613A1 (en) Managing resource pools for deadlock avoidance
JP3932965B2 (ja) マルチスレッドプログラム
US11321135B2 (en) Rate limiting compliance assessments with multi-layer fair share scheduling
KR20180082560A (ko) 태스크의 시간-기반 스케줄링을 위한 방법 및 장치
Torquati et al. Reducing message latency and CPU utilization in the CAF actor framework

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040426

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060818

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060829

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061219

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070201

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070227

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070312

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees