(57)【特許請求の範囲】
【請求項１】
コンピュータ上でサーバ・プロセスにおいて、クライアント・プロセスによる要求に応答してタスクを実行する方法であって、
タイマを起動するステップと、
タスクを開始するステップと、
前記タイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須ではない１つ又は複数の資源を解放するステップと、
前記サーバ・プロセスとクライアント・プロセスとの間に第１の通信チャネルをオープンしている間、前記タイマが起動し、前記タスクが開始し、前記第１の通信チャネルは、前記タスクの実行を要求するために前記クライアント・プロセスが起動するステップと、
前記タイマが前記予め決められた値に到達する前に前記タスクが終了した場合には、前記第１の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告するステップと、
前記タイマが前記予め決められた値に到達する前に前記タスクが終了しなかった場合には、第２の通信チャネルをオープンすると共に、前記第２の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告するステップと
を含んでなる方法。
【請求項２】
さらに、
（ａ）前記タスクの結果をキャッシュに格納し、
（ｂ）前記結果が予め決められたサイズを超えるか否かを決定し、
（ｃ）前記結果が前記予め決められたサイズを超えない場合、該結果を前記クライアント・プロセスに対して送信し、
（ｄ）前記結果が前記予め決められたサイズを超える場合、前記クライアント・プロセスに対し該結果が利用可能であるという通知を送信する、
ことを特徴とする、請求項１に記載の方法。
【請求項３】
クライアント・プロセス及びサーバ・プロセスを備えたコンピュータ環境においてタスクを実行する方法であって、
前記クライアント・プロセスが、前記サーバ・プロセスに対して第１の通信チャネルをオープンするステップと、
前記クライアント・プロセスが、前記第１の通信チャネルを介して、前記サーバ・プロセスに対しタスクを実行するよう命令するステップと、
前記サーバ・プロセスが、タイマを起動すると共に前記タスクを開始するステップと、
前記タイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須でない１以上の資源を解放するステップと、
前記タイマが予め決められた値に到達する前に前記タスクが終了した場合、前記サーバ・プロセスは、前記第１の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告するステップと、
前記タイマが前記予め決められた値に到達する前に前記タスクが終了しなかった場合、前記サーバ・プロセスは、前記サーバ・プロセスが確立する第２の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告するステップと
を含んでなる方法。
【請求項４】
プログラム・コードを格納している１以上のコンピュータ読み出し可能な記憶媒体を含み、前記コンピュータ読み出し可能なプログラム・コードが、
（i）第１の通信チャネルを介して要求されるタスクの実行を開始するコードと、
（ii）前記タスクに対応するタイマを起動するコードと、
（iii）対応するタイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須でない１つ又は複数の資源を解放するコードと、
（iv）前記タイマが予め決められた値に到達する前に前記タスクが終了した場合、前記第１の通信チャネルを介してタスク終了を報告するコードと、
（v）第２の通信チャネルをオープンすると共に、前記タイマが前記予め決められた値に到達する前に前記タスクが終了しなかった場合、前記第２の通信チャネルを介してタスク終了を報告するコードと
を含んでなる、１以上のクライアント・プロセスに代わってタスクを実行するサーバ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にコンピュータ又はコンピュータ・ネットワーク上のタスク実行の分野に係り、特に、タスクの持続期間の変化と、結果のサイズの変化により、システム資源の拘束を回避する、タスクをインテリジェントに実行するシステム及び方法に関する。
【０００２】
【従来の技術】
タスク実行は、コンピュータ・プログラミングの技術分野においてよく知られた動作である。ＵＮＩＸ（商標名）のような最近のオペレーティング・システムにおいては、タスクはプロセス内で実行される。一般に、プロセスは、プログラム・コード、変数、オープンしたすなわち開いたファイル、ソケット及び１つ又は複数のスレッド（すなわち、制御スレッド）のような１組の資源を備えている。スレッドは、実行中のタスクの経過及び状態を追跡するためにプロセスの内部で生成されるオブジェクトである。
【０００３】
タスクの実行に先立ち、一般に、クライアント・プロセスは、ユーザ入力（例えば、キーボード又はディスク）、コンピュータ・プログラム又はいくつかの他のソースを介してタスク命令を受け取る。そして、クライアント・プロセスは、１又は複数のサーバ・プロセスに１つ又は複数のタスクを実行するように命令する。タスクを実行する際、プロセスは互いに通信し、１）実行するタスク及び使用するデータを特定し、２）結果を受け取らなければならない。典型的には、プロセスは、アドレスを備えた通信オブジェクトであるソケットを使用して互いに通信する。ソケット間の通信は、必要に応じてオープンしたりクローズしたりする通信チャネル上で行われる。
【０００４】
ここでは、用語「クライアント・プロセス」とはタスクの実行を要求するプロセスを言い、用語「サーバ・プロセス」とはタスクを実行するプロセスを言う。クライアント・プロセス及びサーバ・プロセスは、一般的には異なるコンピュータ上に存在するが、それらを単一のコンピュータ内で起動することも可能である。
【０００５】
コンピュータ・システムは、単一のステーションから多数のコンピュータを管理する方向へ急速に移行している。これを行うために、管理ステーションは、何千ものリモート・コンピュータ上で多数の同一タスクを実行することができなければならない。しかしながら、コンピュータはしばしば、代わりにタスクを実行するコンピュータ全てを管理することができるほどの資源を備えていない。典型的な解決法は、実行するタスクの全数の一部を実行し、その後現在実行中のタスクのうちどれかが終了した時に、残りのタスクを実行することである。残念ながら、この解決法では望ましくない遅延を生じる結果となる。
【０００６】
また、コンピュータがタスクの遠隔実行を起動するような他の状況も起こる。例えば、制限さられた資源しかないコンピュータは、より大量の資源を備える中央コンピュータ上でタスクを実行するように要求するかもしれない。同様に、制限された資源しかないコンピュータが、大きなタスクがより迅速に終わるように、タスク実行をいくつかのコンピュータに分散させる必要のある場合がある。
【０００７】
ユーザがネットワーク内でタスクを起動すると、クライアント・プロセスは、リモート・サーバ上で実行中のサーバ・プロセスに連絡してタスクを実行させる。クライアント・プロセス及びサーバ・プロセスは、ソケットと、データをそれが受け取られたままに応じて処理する関連するプログラム・コードとを備えた通信マネージャを使用して、互いに通信する。従って、クライアント・プロセスがサーバ・プロセス内でタスクを実行させるためには、クライアント・プロセスは、その通信マネージャを用いてタスクを登録し、それにより、サーバ・プロセスからタスクの結果を受信すなわち受け取るのを待つ状態となる。
また、クライアント・プロセスは、サーバ・プロセスに対して通信チャネルをオープンし、サーバ・プロセスにタスクの実行を命令する。サーバ・プロセスはスレッドを生成し、その中でタスクを実行し、その後結果をクライアント・プロセスに報告する。
【０００８】
従来、タスクは、非同期あるいは、ほとんど一般的には同期のどちらかにより実行されている。タスク実行の各方式は、それぞれ利点と不利な点を備えている。同期タスクは、タスクが長い場合、非同期タスクより多くのシステム資源を拘束する可能性があり、非同期タスクはセットアップすなわち準備と実行とにより時間がかかる。
【０００９】
タスクを同期して実行するためには、クライアント・プロセスは、サーバ・プロセスに対して通信チャネルをオープンし、上述したようにサーバ・プロセスに対しタスクを実行するよう命令し、タスクが実行されている間待機し、その後サーバ・プロセスが送信する結果を受信する。これには、タスクが実行されている間システム資源を拘束あるいは占有するという不利な点がある。通信チャネルは、オープンしたままで残り、他のタスクに使用することができず、この通信チャネルを使用しようとする他のタスクは、単一のタスクの実行中にアイドル状態となっている。そして、タスクが終了すると、その結果がクライアント・プロセスに送信される。
【００１０】
タスクを非同期に実行するためには、クライアント・プロセスは、そのタスクを登録し、サーバ・プロセスに対して通信チャネルをオープンし、タスク要求を送信し、その後通信チャネルをクローズする。タスクがサーバ・プロセスで終了すると、サーバ・プロセスはクライアント・プロセスに対して通信チャネルを再度オープンし、その結果を送信する。
【００１１】
同期タスクは、通信チャネルをオープンしたままにしておく必要があるが、必要な時に通信チャネルをオープンしたりクローズしたりする余分な作業が不要である。非同期タスクは通信チャネルをオープンしたままにしておく必要はないが、通信チャネルをオープンしたりクローズしたりする余分な作業が必要である。従って、長いタスクは非同期で実行して、システム資源を節約し、同時に実行されるタスク数を増やすことができるようにし、短いタスクは同期して実行することにより非同期実行のセットアップの遅延を避けるようにする。しかしながら、いずれのタスク実行モードを使用すべきかを決定することは、解決困難な問題となっている。
【００１２】
それにもかかわらず、コンピュータ・システムが単一ステーションによって非常に多くのコンピュータを管理する方向へ進化し、ネットワークに接続されたコンピュータの数が増加するのに従い、最良の実行方法を選択することがより重要となってきている。例えば、管理ステーションが一度に少数のリモート・コンピュータでしかタスクを実行することができない場合、何百というリモート・システム上で簡単なタスクを実行するために、そのタスク自体の長さの何百倍の時間がかかる可能性がある。同様に、全てのタスクを非同期に実行することにより、同時に管理されるリモート・コンピュータの数が増加する場合、コンピュータ管理に含まれる何百という簡単あるいは短いタスクについて、通信チャネルを繰り返しオープンしたりクローズしたりする時間の遅延が、大きな負担となる。適切に同期又は非同期のタスク実行を選択することは、リモート・システムの数が増加するに従ってますます重要となっている。
【００１３】
しかしながら、大抵のタスクがどのくらいの時間続くかを判断することは非常に困難であり、そのため、予め測定された実行期間に基づいてタスク毎に異なる方法で実行するシステムを作ることが困難となっている。例えば、タスクが処理するデータの量あるいは性質によって実行時間が決まる場合、又はタスクが最初の（ｆｉｒｓｔ−ｕｓｅ）初期化を実行する場合、そのタスクの時間は、ある場合は長くなり、ある場合は短くなる。また、タスクの時間は、コンピュータ・システムの速度とオペレーティング・システムの効率によって決まる。システム・ローディングもまた、ビジー期間中あるいは処理待ち期間中のタスク実行の速度を遅くする。更に、タスクの時間が一貫していた場合であっても、タスクの開発及びプログラミング中にタスクの時間を測定し追跡することは困難でできたとしても単調なものであると共に、コンピュータ・ハードウエア又はオペレーティング・システムを変更した場合には更新しなければならない。
【００１４】
タスクの実行がシステム資源に課す負担として、他に、結果の報告がある。タスクがサーバ・プロセスで終了するとすぐに、その結果がクライアント・プロセスに返送される。このシステム資源の未管理の使用は、時にはクライアント・プロセスをアイドル状態で待機させることとなり、その他の時には過度の負担となる。
【００１５】
タスクについての事前の知識が無くても、リモート・プロセスにおいてタスクの時間に基づきタスクを同期又は非同期に実行する方法及び装置を提供すること、及び、ビジー期間中に要求プロセスをあふれさせることなく実行結果を返送することはが望ましい。本発明は、これらの目標の全てを達成する。
【００１６】
【発明が解決しようとする課題】
本発明は、実行中に判断するタスクの時間あるいは継続期間に応じて、同期又は非同期にタスクをインテリジェントに実行し、それによって、全体の速度を速くすると共に必要なシステム資源を減少させるシステム及び方法を提供する。さらに、結果をキャッシュすなわちキャッシュ領域に格納し、タスクを起動するクライアント・プロセスの要求によって提供し、それにより、ビジー時にクライアント・プロセスにデータがあふれるのを回避することができるシステム及び方法を提供する。
【００１７】
【課題を解決するための手段】
本発明の特徴を有するタスク実行システムは、タスクを開始するクライアント・プロセスと、タスクを実行するサーバ・プロセスを有する。クライアント・プロセスは、サーバ・プロセスに対して通信チャネルをオープンし、サーバ・プロセスにタスクを同期して実行するよう命令する。そして、サーバ・プロセスは、タイマを起動し、タスクを実行する。タイマが予め決められた値に到達する前にそのタスクが終了あるいは終了した場合、サーバ・プロセスはタスクの結果を生成して、オープンしたままの通信チャネルを介し、クライアント・プロセスに対してタスクの終了を報告する。タイマが予め決められた値に到達する前にタスクが終了しない場合、サーバ・プロセスは、クライアント・プロセスに対し、タスクを非同期に実行することを通知し、通信チャネルをクローズする。非同期のタスクが終了すると、サーバ・プロセスは結果を生成し、クライアント・プロセスに対して新たな通信チャネルをオープンし、その新たな通信チャネルを介してクライアント・プロセスに対しタスクの終了を報告する。
【００１８】
結果がサーバ・プロセスによってインテリジェントに報告されることにより、ビジー時のクライアント・プロセスが氾濫するのを避けることができる。タスクの実行が終了した時、サーバ・プロセスはそのタスクの結果をキャッシュすなわちキャッシュ領域に格納する。そして、サーバ・プロセスは、結果のサイズが予め決められた値を超えるか否かを判断する。結果のサイズが予め決められた値を超えない場合、サーバ・プロセスは結果をクライアント・プロセスに送信する。結果のサイズが予め決められた値を超えた場合、サーバ・プロセスは、クライアント・プロセスに対して結果が利用可能なことを示し、クライアント・プロセスは、レディー時すなわち準備ができた時にキャッシュから結果を取得することができる。
【００１９】
本発明の上述した利点と目的、又はその他の重要な利点と目的は、添付した説明、図面及び特許請求の範囲において更に説明されており、又は、それらから明らかとなるであろう。
【００２０】
【発明の実施の形態】
本明細書に開示する方法及び装置は、リモート・タスクをインテリジェントに実行するために提供される。本方法及び装置は、単一コンピュータに限定してもよいし、ネットワーク・コンピュータ・システムを構成する複数のコンピュータにわたって分散させるようにしてもよい。
【００２１】
本実施の形態の説明では、クライアント・プロセスは既にタスクを実行するよう命令されているものとする。クライアント・プロセスに対するタスクの実行命令は、多くの周知の方法で（例えば、キーボードによるユーザ入力コマンドにより、又はコンピュータ・プログラムを含むコマンド・シーケンスにより）、行うことができる。なお、これらの方法の詳述については本実施の形態の説明の範囲に含まれていない。
【００２２】
例として、本実施の形態で述べるクライアント・プロセスは、ネットワーク・アドミニストレータのコンピュータであるものとする。クライアント・プロセスは、同一のタスクを多数実行する必要があるが、これらのタスク全てを「ローカルに」（すなわち、ネットワーク・アドミニストレータのコンピュータ内で）実行するほど資源を備えていないため、多数のサーバ・プロセス（すなわち、ネットワークに接続された複数の追加のコンピュータ）がそれらタスクを「リモートに」実行するよう要求する。本実施の形態では、クライアント・プロセス及びサーバ・プロセスのこのような構成を例として述べるが、本発明に関して、クライアント・プロセスはタスクの実行を要求すればよく、サーバ・プロセスはタスクの実行を開始すればよい。従って、クライアント・プロセス及びサーバ・プロセスは同じプロセスであると考える（ｅｎｖｉｓｉｏｎ）。
【００２３】
上述したように、サーバ・プロセスはタスクをインテリジェントに実行する。リモート・タスクをインテリジェントに実行するには、２つの判断を行う必要がある。すなわち、１）タスクを同期して終了させるか非同期に終了させるか、及び２）タスク終了時にクライアント・プロセスに結果を自動返送するか、もしくは単にタスクの終了のみをクライアント・プロセスに通知するだけにするかである。
【００２４】
実行期間の短いタスクは、実行プロセスを初期化するのに必要な時間を最小限にするために、同期して実行する。実行期間の長いタスクは、同期して開始し、予め決められた制限時間を超えた後に非同期モードに切換えられる。この制限時間は、ユーザが設定してもよいし、プログラム・コードに固定するようにしてもよい。タスク実行を非同期モードにインテリジェントに切換えることにより、実行期間の長いタスクがシステム資源を保持し、このタスクの終了をアイドル状態で待たせることがない。例えば、一般のネットワーク・サーバは、約２００の同時スレッドしかサポートすることができない。ネットワーク・アドミニストレータがディスク・ドライブのような媒体を３００のリモート・システムの各々で初期化する必要がある場合、ネットワーク・アドミニストレータはリモート・システム全てを同期して制御するために利用可能なスレッドを十分に備えていないため、初期化タスクの一部を逐次方式で実行しなければならない。各媒体の初期化に１時間かかる場合、初期化のいくつかは２時間では終了しない（少なくとも１００の初期化は、最初の２００の初期化が終了するまで開始することができないため）。逐次実行は速度が好ましくないほど遅く、終了すべきタスクの数が増えるほど問題が複雑になることが分かっている。しかしながら、同期モードでタスクを開始し、その後、予め決められた制限時間を超えるにしたがって非同期モードに切換えることにより、タスクの終了に必須でない資源は解放されてより効率的に使用することができる。従来のシステムと異なり、このような処理は、タスクの実行期間を予め知ることなく行うことができる。より長いタスクの非同期実行は、スレッド、ソケット、及びクライアント・プロセスがオープンした通信チャネルの全てを解放する。上述した例では、クライアント・プロセスは、媒体の初期化を３００のリモート・システム全てにおいて略同時に開始することができる。
【００２５】
また、本発明者が構想（ｅｎｖｉｓｉｏｎ）するように、リモート・タスクをインテリジェントに実行することにより、リモート・タスクの終了に対応して大量のデータが生成される場合、クライアント・プロセスの資源が不求に飽和するのを防止することができる。これは、リモート・キャッシュ（リモート・サーバにおいて最も適当なキャッシュ）に、大量の結果のセットを格納し、クライアント・プロセスに対し結果が利用可能であることを通知し、クライアント・プロセスがいつ結果を要求するか決定することができるようにすることによって、達成される。リモート・タスクがサーバ・プロセスで終了すると、サーバ・プロセスは結果のサイズを予め決められた制限サイズと比較する。この結果が制限サイズより大きい場合、サーバ・プロセスは結果を格納して、クライアント・プロセスに対しそれらが利用可能であることを通知する。そして、クライアント・プロセスは、ネットワーク・トラフィックやタスクの優先順位のような判断基準に基づいて、それらをいつ要求するかを決定する。
【００２６】
本発明について概略してきたが、より具体的な説明を以下に詳述する。
【００２７】
ネットワーク・コンピュータ・システムを図１に図示し、リモート同期タスクの実行で使用される資源を示す。クライアント・プロセス１００は、全てのリモート・サーバ・プロセス１２２におけるタスクの遠隔実行を制御するメイン・スレッド１１０を含む。メイン・スレッド１１０は、タスクを実行するサーバ・プロセス１２２の各々について、メモリ資源１０２を使用して、他のスレッド１０４を生成する。各スレッド１０４は、その関連したサーバ・プロセス１２２におけるタスクの進捗を追跡して、状態機械（ステート・マシン）として行動する。各スレッド１０４は、サーバ・プロセス１２２と通信するためのソケット資源１０６とネットワーク資源１０８とを要求する。クライアント・プロセス１００は、また、クライアント・プロセス１００と通信する全てのサーバ・プロセス１２２を追跡する入力（ｉｎｃｏｍｉｎｇ）通信マネージャ１１２を含む。
【００２８】
各サーバ・プロセス１１４は、自身のソケット１２０、タスク・スレッド１１８及びタイマ１１６を含んでいる。
【００２９】
図２Ａないし図２Ｄは、単一のリモート・サーバ・プロセス２０２でのタスクの同期実行中においてクライアント・プロセス２００及びサーバ・プロセス２０２が行うステップを示す一連のブロック図である。
【００３０】
図２Ａに示すように、第１のステップでは、タスクがセット・アップされ、タスクとタイマ２２０の両方が実行されている。タスクをセット・アップするために、クライアント・プロセス２００のメイン・スレッド２１０は、リモート・サーバ・プロセス２０２上でタスクを実行するためにスレッド２１６を生成する。メイン・スレッド２１０は、クライアント・プロセス２００にタスクを登録して、クライアント・プロセス２００の入力通信マネージャ１１２がサーバ・プロセス２０２からの通信を待つようにする。通信マネージャの一般的な機能及び目的は、本技術分野において周知である。従って、プロセスの通信マネージャが設けられていることは図１に示しており、図２Ａないし図２Ｄ及び図３Ａないし図３Ｄの各図においても図示しないが設けられている。クライアント・プロセス２００は、サーバ・プロセス２０２に対して通信チャネル２１８をオープンし、タスクの実行を命令する。サーバ・プロセス２０２は、タスクを実行するためにスレッド２２２を生成し、タイマ２２０を開始してタスクの持続期間を監視する。タスクが終了する前にタイマ２２０が予め決められた値に到達すると、図３を参照して後述するように、タスクは非同期モードで終了することとなる。
【００３１】
図２Ｂに示すように、第２のステップでは、タスクが終了してタイマ２２０に割込みを発生させる。通信チャネル２１８は、図２Ａに示す第１のステップからオープンしたままである。サーバ・プロセス２０２はスレッド２２２を削除し、メモリを解放する。
【００３２】
図２Ｃに示すように、第３のステップでは、サーバ・プロセス２０２は、同期タスク実行中にオープンしたままである通信チャネル２１８を介して、クライアント・プロセス２００のスレッド２１６に対し、タスク状態を報告する。
【００３３】
サーバ・プロセス２０２がクライアント・プロセス２００に対して報告するタスク状態は、タスクの結果、又は、結果の用意ができたという単なるメッセージ（あるいは通知）のいずれかを含む。タスクが終了した時、結果はキャッシュ（キャッシュ領域）２３０に格納される。タスクの結果が予め決められたサイズ以下である場合、サーバ・プロセス２０２はそのタスクの結果を、すぐにクライアント・プロセス２００に送信する。タスクの結果が予め決められたサイズより大きい場合、サーバ・プロセス２０２はクライアント・プロセス２００に対し、タスクが終了し、クライアント・プロセス２００は準備ができた時にその結果を要求することができるというメッセージを送信する。これにより、他のサーバ・プロセス又は他の演算でビジー状態かもしれないときに、クライアント・プロセス２００がタスクの結果によって過負荷になることを防ぐ。
【００３４】
図２Ｄに示すように、第４のステップでは、タスクが終了して、クライアント・プロセス２００及びサーバ・プロセス２０２は、タスクの実行中に使用したシステム資源を解放する。
【００３５】
図２Ａないし図２Ｃに示す通信チャネル２１８が、タスクの実行中に不用意に破壊された場合、周知の方法によって再度オープンされる。タスクがクライアント・プロセス２００に登録されているため、図１に示す入力通信マネージャ１１２は、再度オープンした通信チャネルを介して、タスクの実行を妨げることなく通信を受け入れる。
【００３６】
図３Ａないし図３Ｅは、単一のリモート・サーバ・プロセス３０２でのタスクの非同期実行中においてクライアント・プロセス３００が行うステップを示す一連のブロック図である。
【００３７】
ここでもタスクは同期モードで開始し、その後、タスクが持続期間の長いタスクであると認識された場合に、非同期モードに切換えられる。図３Ａに示すように、第１のステップでは、タスクがセット・アップされ、上述したように同期モードで開始される。タスクをセット・アップするために、クライアント・プロセス３００のメイン・スレッド３０４はリモート・サーバ・プロセス３０２においてタスクを実行するためにスレッド３１６を生成する。メイン・スレッド３０４はクライアント・プロセス３００にタスクを登録し、図１に示す入力通信マネージャ１１２が、サーバ・プロセス３０２からの通信を待つようにする。スレッド３１６は、サーバ・プロセス３０２に対して通信チャネル３１８をオープンし、タスクの実行を命令する。サーバ・プロセス３０２は、タスクを実行するためにスレッド３２２を生成し、かつタイマ３２０を起動してタスクの持続期間を監視する。タイマ３２０が予め決められた値に到達する前に、タスクが同期モードで終了すると、その結果は、図２Ａないし図２Ｄに関して上述したように報告される。通信チャネル３１８は、タスクが同期モードにある間に不用意に破壊された場合、周知の方法によって再度オープンされる。
【００３８】
図３Ｂに示すように、第２のステップでは、タイマ３２０はタスク３２２が終了する前に予め決められた値に到達する。サーバ・プロセス３０２は、図３Ａに示す第１のステップからオープンしたままである通信チャネル３１８を介してクライアント・プロセス３００に連絡を取り、スレッド３１６に対して、タスクを非同期モードで継続することを知らせる。サーバ・プロセス３０２は通信チャネル３１８をクローズしてタイマ３２０を解放する。
【００３９】
図３Ｃに示すように、第３のステップでは、クライアント・プロセス３００はタスクが終了するのを待ち、スレッド３２２はタスクの実行を継続する。
【００４０】
本発明の一実施形態では、クライアント・プロセス３００のスレッド３１６は、タスクの実行がサーバ・プロセス３０２において継続している間、解放され、それによってさらに資源が解放される。これにより、より多数のリモート・サーバ・プロセスを同時に制御することができる。スレッド３１６は、非同期実行中に解放された場合、タスクが終了した時にサーバ・プロセス３０２からデータを受信すると、入力通信マネージャ１１２又はメイン・スレッド３０４によって再スタートする。
【００４１】
図３Ｄに示すように、ステップ４では、タスクはスレッド３２２内で終了し、新たな通信チャネル３４４がサーバ・プロセス３０２とクライアント・プロセス３００の間でオープンする。タスク状態は、上述したようにサーバ・プロセス３０２によってクライアント・プロセス３００に報告される。タスクが終了すると、結果はキャッシュ３５０に格納される。タスクの結果が予め決められたサイズより大きい場合、サーバ・プロセス３０２はクライアント・プロセス３００に、タスクが終了して準備ができた時にクライアント・プロセス３００がその結果を要求することができる、というメッセージを送信する。タスクの結果が予め決められたサイズ以下である場合、サーバ・プロセス３０２はクライアント・プロセス３００に直ちにタスクの結果を送信する。
【００４２】
図３Ｅに示すように、ステップ５では、タスクが終了し、クライアント・プロセス３００及びサーバ・プロセス３０２は、タスクの実行で使用した全てのシステム資源を解放する。
【００４３】
図４は、インテリジェントなタスクの実行中にクライアント・プロセスが実行するステップのより詳細な説明を示すフローチャートである。最初に、クライアント・プロセスには、本技術分野において従来から周知の方法により、タスクが割り当てられる（ステップ４００）。そして、クライアント・プロセスは、リモート・タスク実行を開始するためにスレッドを生成し、サーバ・バインド（ｓｅｒｖｅｒ  ｂｉｎｄｉｎｇ）を取得して（ステップ４０４）、サーバ・プロセスに対して通信チャネルをオープンし入力通信マネージャによりタスクを登録する。サーバ・バインドの取得が成功した場合、タスクをサーバ・プロセスに送信する（ステップ４０８）。そして、クライアント・プロセスは、サーバ・プロセスがタスクの結果、又はタスクが非同期に実行されるという通知を受信するのを待つ。タスクが非同期に実行される場合、クライアント・プロセスはタスクの終了を継続して待つ（ステップ４１２）。リモート・タスク実行を開始するのに使用するスレッドをクローズして、非同期のタスク実行中に資源を解放することができる。そのスレッドは、クローズした場合、非同期タスクが終了してサーバ・プロセスがその終了を報告した時に、再スタートする。
【００４４】
そして、結果のサイズが、サーバ・プロセスが決定したようにアドミニストレータにより設定された制限を超えない場合、結果（ステップ４１６）は、クライアント・プロセスにより直ちに受信される。あるいは、結果がサーバ・プロセスに格納されたという通知がクライアント・プロセスにより受信される。それらが格納されていた場合、クライアント・プロセスは据置かれていた結果（ｄｅｆｅｒｒｅｄ  ｒｅｓｕｌｔ）を取得し（ステップ４２０）、タスクは終了する（ステップ４２４）。
【００４５】
図５は、サーバ・プロセスにおけるタスクの実行を概説したフローチャートである。サーバ・プロセスは、クライアント・プロセスからタスク命令を受信した時、スレッド内でタスクを開始し、タイマを起動する（ステップ５００）。そして、サーバ・プロセスは待ち、タスクが先に終了するかタイマが先に期限切れになるかを判断する（ステップ５０２）。タイマが予め設定された値に到達する前にタスクが終了した場合、タスク・スレッドはクローズして（ステップ５０６）、サーバ・プロセスはタスクの結果を報告する準備をする。タスクが終了する前にタイマが切れた場合、サーバ・プロセスはクライアント・プロセスに対し、タスクを非同期に実行するということを通知し、通信チャネルをクローズし（ステップ５０４）、タイマを解放する。そして、サーバ・プロセスはタスクの終了を待つ。タスクが終了すると、サーバ・プロセスはクライアント・プロセスに対して通信チャネルを再度オープンする（ステップ５０８）。タスクの結果は、すぐに送信されるかクライアント・プロセスによって後に要求されるまで、サーバ・プロセスに格納される。
【００４６】
そして、サーバ・プロセスは結果のサイズをアドミニストレータが予め決めた値と比較する（ステップ５１０）。結果が予め決められた値以下である場合、その結果をクライアント・プロセスに対して直ちに送信する（ステップ５１１）。結果が予め決められた値より大きい場合、サーバ・プロセスはクライアント・プロセスに対し、要求すればそれらを使用することができるということを報告する（ステップ５１２）。そして、タスクは終了し（ステップ５１４）、サーバ・プロセスはタスクの実行に使用した残りのスレッドをクローズする。
【００４７】
上述した本発明の好ましい実施の形態によれば、クライアント・プロセスが従来より多くの同時タスクを非同期に実行することができ、システム資源が節約される。特許請求の範囲で述べている「タスクの終了に必須でない資源」には、タスクの非同期実行中に解放される資源の一部又は全てが含まれる。それら資源には、通信チャネル、メモリ、スレッド及びソケットがあるが、それらに限定されるものではない。ローカル資源とは、サーバ・プロセスが直接制御する資源（例えば、自身のソケット及びスレッド）である。リモート資源とは、他のプロセスが制御する資源（例えば、ある環境において、通信チャネル）である。
【００４８】
また、上述した本発明の好ましい実施の形態では、クライアント・プロセスが、ネットワーク帯域幅をインテリジェントに管理しボトルネックを回避することにより、ネットワーク通信トラフィックを制御することができる。結果をサーバ・プロセスに格納することにより、タスクがサーバ・プロセスによって非同期に実行されている間にクライアント・プロセスが破壊された場合であっても、それらの結果を再生させることができ、堅牢性という二次的な利益を達成することができる。
【００４９】
ここでは、本発明の例示的な、かつ目下好ましい実施の形態を詳細に述べてきたが、発明の概念は様々に具体化して採用することができることは当然であり、特許請求の範囲は従来技術に限定されることを除いて、そのような変形を含むように解釈すべきである。
【００５０】
以上、本発明の実施例について詳述したが、以下、本発明の各実施態様の例を示す。
【００５１】
（実施態様１）
コンピュータ上でサーバ・プロセス（２０２，３０２）において、クライアント・プロセス（２００，３００）による要求に応答してタスクを実行する方法であって、
（ａ）タイマ（２２０，３２０）を起動し、
（ｂ）タスク（２２２，３２２）を開始し、
（ｃ）前記タイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須ではない１つ又は複数の資源（３１８，３２０）を解放すること
を特徴とする方法。
【００５２】
（実施態様２）
前記サーバ・プロセス（２０２，３０２）及びクライアント・プロセス（２００，３００）の間に第１の通信チャネル（２１８，３１８）をオープンしている間、前記タイマ（２２０，３２０）が起動し、前記タスク（２２２，３２２）が開始し、前記第１の通信チャネルは、前記タスクの実行を要求するために前記クライアント・プロセスが起動するものであって、
（ａ）前記タイマが前記予め決められた値に到達する前に前記タスクが終了した場合、前記第１の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告し、
（ｂ）前記タイマが前記予め決められた値に到達する前に前記タスクが終了しなかった場合、第２の通信チャネル（３４４）をオープンすると共に、前記第２の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告する
ことを特徴とする実施態様１記載の方法。
【００５３】
（実施態様３）
（ａ）前記タスク（２２２，３２２）の結果をキャッシュ（２３０，３５０）に格納し、
（ｂ）前記結果が予め決められたサイズを超えるか否かを判断し、
（ｃ）前記結果が前記予め決められたサイズを超えない場合、該結果を前記クライアント・プロセス（２００，３００）に対して送信し、
（ｄ）前記結果が前記予め決められたサイズを超える場合、前記クライアント・プロセスに対し該結果が利用可能であるという通知を送信する
ことを特徴とする実施態様１記載の方法。
【００５４】
（実施態様４）
クライアント・プロセス（２００，３００）及びサーバ・プロセス（２０２，３０２）を備えたコンピュータ環境においてタスクを実行する方法であって、
（ａ）前記クライアント・プロセスは、前記サーバ・プロセスに対して第１の通信チャネル（２１８，３１８）をオープンし、
（ｂ）前記クライアント・プロセスは、前記第１の通信チャネルを介して、前記サーバ・プロセスに対しタスクを実行するよう命令し、
（ｃ）前記サーバ・プロセスは、タイマ（２２０，３２０）を起動すると共にタスク（２２２，３２２）を開始し、
（ｄ）前記タイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須でない１つ又は複数の資源（３１８，３２０）を解放する
ことを特徴とする方法。
【００５５】
（実施態様５）
（ａ）前記タイマ（２２０）が予め決められた値に到達する前に前記タスク（２２２）が終了した場合、前記サーバ・プロセス（２０２）は、前記第１の通信チャネル（２１８）を介して前記クライアント・プロセス（２００）に対してタスク終了を報告し、
（ｂ）前記タイマ（３２０）が前記予め決められた値に到達する前に前記タスク（３２２）が終了しなかった場合、前記サーバ・プロセス（３０２）は、前記クライアント・プロセス（３００）が確立する第２の通信チャネル（３４４）を介して前記クライアント・プロセスに対してタスク終了を報告する
ことを特徴とする実施態様４記載の方法。
【００５６】
（実施態様６）
（ａ）前記タイマ（３２０）が前記予め決められた値に到達する前に前記タスク（３２２）が終了した場合、前記サーバ・プロセス（３０２）は、前記第１の通信チャネル（３１８）を介して、前記タスクが非同期に実行されることを前記クライアント・プロセス（３００）に通知し、
（ｂ）前記第１の通信チャネルをクローズする
ことを特徴とする実施態様４記載の方法。
【００５７】
（実施態様７）
コンピュータ上でサーバ・プロセス（２０２，３０２）においてクライアント・プロセス（２００，３００）に対してタスクの結果を報告する方法であって、
（ａ）タスクの結果をキャッシュ（２３０，３５０）に格納し、
（ｂ）前記タスクの結果が予め決められたサイズを超えるか否かを判断し、
（ｃ）前記タスクの結果が前記予め決められたサイズを超えない場合、該タスクの結果をクライアント・プロセスに送信し、
（ｄ）前記タスクの結果が前記予め決められたサイズを超える場合、該タスクの結果が利用可能であるという通知をクライアント・プロセスに送信する
ことを特徴とする方法。
【００５８】
（実施態様８）
１つ又は複数のクライアント・プロセス（２００，３００）に代わってタスクを実行するサーバ・プロセス（２０２，３０２）であって、
（ａ）１つ又は複数のコンピュータ読み出し可能な記憶媒体と、
（ｂ）前記１つ又は複数のコンピュータ読み出し可能な記憶媒体に格納されたコンピュータ読み出し可能なプログラム・コードとを具備し、
前記コンピュータ読み出し可能なプログラム・コードは、
（ｉ）１つ又は複数のクライアント・プロセスに代わって１つ又は複数のタスク（２２２，３２２）の実行を開始するコードと、
（ｉｉ）前記１つ又は複数のタスクに対応して１つ又は複数のタイマ（２２０，３２０）を起動するコードと、
（ｉｉｉ）対応するタイマが予め決められた値に到達する前にタスクが終了しなかった場合、該タスクの終了に必須でない１つ又は複数の資源（３１８，３２０）を解放するコードと
を備えたことを特徴とするサーバ・プロセス。
【００５９】
（実施態様９）
１つ又は複数のクライアント・プロセス（２００，３００）に代わってタスクを実行するサーバ・プロセス（２０２，３０２）であって、
（ａ）１つ又は複数のコンピュータ読み出し可能な記憶媒体と、
（ｂ）前記１つ又は複数のコンピュータ読み出し可能な記憶媒体に格納されたコンピュータ読み出し可能なプログラム・コードとを具備し、
前記コンピュータ読み出し可能なプログラム・コードは、
（ｉ）第１の通信チャネル（２１８，３１８）を介して要求されるタスク（２２２，３２２）の実行を開始するコードと、
（ｉｉ）前記タスクに対応するタイマ（２２０，３２０）を起動するコードと、
（ｉｉｉ）対応するタイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須でない１つ又は複数の資源（３１８，３２０）を解放するコードと、
（ｉｖ）前記タイマが予め決められた値に到達する前に前記タスクが終了した場合、前記第１の通信チャネルを介してタスク終了を報告するコードと、
（ｖ）第２の通信チャネル（３４４）をオープンすると共に、前記タイマが前記予め決められた値に到達する前に前記タスクが終了しなかった場合、前記第２の通信チャネルを介してタスク終了を報告するコードと
を備えたことを特徴とするサーバ・プロセス。
【００６０】
（実施態様１０）
タスクの結果をクライアント・プロセス（２００，３００）に報告するサーバ・プロセス（２０２，３０２）であって、
（ａ）１つ又は複数のコンピュータ読み出し可能な記憶媒体と、
（ｂ）前記１つ又は複数のコンピュータ読み出し可能な記憶媒体に格納されたコンピュータ読み出し可能なプログラム・コードとを具備し、
前記コンピュータ読み出し可能なプログラム・コードは、
（Ａ）タスクの結果をキャッシュ（２３０，３５０）に格納するコードと、
（Ｂ）前記タスクの結果が予め決められたサイズを超えるか否かを判断するコードと、
（Ｃ）前記タスクの結果が前記予め決められたサイズを超えない場合、該タスクの結果をクライアント・プロセスに送信するコードと、
（Ｄ）前記タスクの結果が前記予め決められたサイズを超える場合、前記タスクの結果が利用可能であるという通知をクライアント・プロセスに対して送信するコードと
を備えたことを特徴とするサーバ・プロセス。
【００６１】
（実施態様１１）
コンピュータに、
（ａ）タイマ（２２０，３２０）を起動し、
（ｂ）タスク（２２２，３２２）を開始し、
（ｃ）前記タイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須ではない１つ又は複数の資源（３１８，３２０）を解放する
ことを実行させ、サーバ・プロセス（２０２，３０２）において、クライアント・プロセス（２００，３００）による要求に応答してタスクを実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【００６２】
（実施態様１２）
前記サーバ・プロセス（２０２，３０２）及びクライアント・プロセス（２００，３００）の間に第１の通信チャネル（２１８，３１８）がオープンしている間、前記タイマ（２２０，３２０）が起動し、前記タスク（２２２，３２２）が開始し、前記第１の通信チャネルは、前記タスクの実行を要求するために前記クライアント・プロセスが起動する手順であって、
（ａ）前記タイマが前記予め決められた値に到達する前に前記タスクが終了した場合、前記第１の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告し、
（ｂ）前記タイマが前記予め決められた値に到達する前に前記タスクが終了しなかった場合、第２の通信チャネル（３４４）をオープンすると共に、前記第２の通信チャネルを介して前記クライアント・プロセスに対してタスク終了を報告する
ことを含むことを特徴とする実施態様１１記載の記録媒体。
【００６３】
（実施態様１３）
（ａ）前記タスク（２２２，３２２）の結果をキャッシュ（２３０，３５０）に格納、
（ｂ）前記結果が予め決められたサイズを超えるか否かを判断し、
（ｃ）前記結果が前記予め決められたサイズを超えない場合、該結果を前記クライアント・プロセス（２００，３００）に対して送信し、
（ｄ）前記結果が前記予め決められたサイズを超える場合、前記クライアント・プロセスに対し該結果が利用可能であるという通知を送信する
ことを含むことを特徴とする実施態様１１記載の記憶媒体。
【００６４】
（実施態様１４）
コンピュータに、
（ａ）クライアント・プロセス（２００，３００）は、サーバ・プロセス（２０２，３０２）に対して第１の通信チャネル（２１８，３１８）をオープンし、
（ｂ）前記クライアント・プロセスは、前記第１の通信チャネルを介して、前記サーバ・プロセスに対しタスクを実行するよう命令し、
（ｃ）前記サーバ・プロセスは、タイマ（２２０，３２０）を起動すると共にタスク（２２２，３２２）を開始し、
（ｄ）前記タイマが予め決められた値に到達する前に前記タスクが終了しなかった場合、該タスクの終了に必須でない１つ又は複数の資源（３１８，３２０）を解放する
ことを実行させ、タスクを実行するためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【００６５】
（実施態様１５）
（ａ）前記タイマ（２２０）が予め決められた値に到達する前に前記タスク（２２２）が終了した場合、前記サーバ・プロセス（２０２）は、前記第１の通信チャネル（２１８）を介して前記クライアント・プロセス（２００）に対してタスク終了を報告し、
（ｂ）前記タイマ（３２０）が前記予め決められた値に到達する前に前記タスク（３２２）が終了しなかった場合、前記サーバ・プロセス（３０２）は、前記クライアント・プロセス（３００）が確立する第２の通信チャネル（３４４）を介して前記クライアント・プロセスに対してタスク終了を報告する
ことを含むことを特徴とする実施態様１４記載の記録媒体。
【００６６】
（実施態様１６）
（ａ）前記タイマ（３２０）が前記予め決められた値に到達する前に前記タスク（３２２）が終了した場合、前記サーバ・プロセス（３０２）は、前記第１の通信チャネル（３１８）を介して、前記タスクが非同期に実行されることを前記クライアント・プロセス（３００）に通知し、
（ｂ）前記第１の通信チャネルをクローズする
ことを含むことを特徴とする実施態様１４記載の記録媒体。
【００６７】
（実施態様１７）
コンピュータに、
（ａ）タスクの結果をキャッシュ（２３０，３５０）に格納し、
（ｂ）前記タスクの結果が予め決められたサイズを超えるか否かを判断し、
（ｃ）前記タスクの結果が前記予め決められたサイズを超えない場合、該タスクの結果をクライアント・プロセスに送信し、
（ｄ）前記タスクの結果が前記予め決められたサイズを超える場合、該タスクの結果が利用可能であるという通知をクライアント・プロセスに送信する
ことを実行させ、サーバ・プロセス（２０２，３０２）においてクライアント・プロセス（２００，３００）に対してタスクの結果を報告させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【００６８】
【発明の効果】
以上のように、本発明を用いると、タスクの時間あるいは継続期間に応じて、同期又は非同期にタスクをインテリジェントに実行するので、全体の速度を速くすると共に必要なシステム資源を減少させる。さらに、結果をキャッシュに格納し、タスクを起動するクライアント・プロセスの要求によって提供し、それにより、ビジー時にクライアント・プロセスにデータがあふれるのを回避することができる。
【図面の簡単な説明】
【図１】多数のリモート・タスクが起動した場合の資源の使用を説明するブロック図である。
【図２Ａ】同期したタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図２Ｂ】同期したタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図２Ｃ】同期したタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図２Ｄ】同期したタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図３Ａ】非同期のタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図３Ｂ】非同期のタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図３Ｃ】非同期のタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図３Ｄ】非同期のタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図３Ｅ】非同期のタスク実行のあるステップにおける資源の使用を説明するブロック図である。
【図４】クライアント・プロセスにおけるインテリジェントなタスク実行を概説するフローチャートである。
【図５】サーバ・プロセスにおけるインテリジェントなタスク実行を概説するフローチャートである。
【符号の説明】
１００、２００、３００：クライアント・プロセス
１０２：メモリ資源
１０４：スレッド
１０６：ソケット資源
１０８：ネットワーク資源
１１０、２１０、３０４：メイン・スレッド
１１２：入力通信マネージャ
１１６、２２０、３２０：タイマ
１１８：タスク・スレッド
１２０：ソケット
１１４、１２２、２０２、３０２：サーバ・プロセス
２１６、３１６：スレッド
２１８、３１８、３４４：通信チャネル
２２２、３２２：スレッド
２３０、３５０：キャッシュ
４００、４０４、４０８、４１２、４１６、４２０、４２４、５００、５０２、５０４、５０６、５０８、５１０、５１１、５１２、５１４：ステップをあらわすブロック
【図１】
0003600749.tif 000002
【図２Ａ】
0003600749.tif 000003
【図２Ｂ】
0003600749.tif 000004
【図２Ｃ】
0003600749.tif 000005
【図２Ｄ】
0003600749.tif 000006
【図３Ａ】
0003600749.tif 000007
【図３Ｂ】
0003600749.tif 000008
【図３Ｃ】
0003600749.tif 000009
【図３Ｄ】
0003600749.tif 000010
【図３Ｅ】
0003600749.tif 000011
【図４】
0003600749.tif 000012
【図５】
0003600749.tif 000013