(57)【特許請求の範囲】
【請求項１】
ネットワーク上で第１、第２のコンピュータ間でファイルの入出力の処理を行うシステムであり、
前記ファイルを送信する側の第１のコンピュータに、入力元のファイルからデータを読み出して分割して複数のピースとして前記ネットワークへ送信する処理をマルチスレッドの処理により行う第１のモジュールを備え、
前記ファイルを受信する側の第２のコンピュータに、前記ネットワークから前記複数のピースを受信して統合して出力先のファイルへ書き込む処理をマルチスレッドの処理により行う第２のモジュールを備え、
前記第１のモジュールは、前記分割による複数の各々のピースの送信を、割当てる複数の各々の送信スレッドにより同時並行で処理し、
前記第２のモジュールは、前記分割による複数の各々のピースの受信を、割当てる複数の各々の受信スレッドにより同時並行で処理し、
前記第１のモジュールは、送信するピースに、当該ファイルの送信のＩＤと、当該ファイルの先頭位置からの相対位置の情報とを付属させ、
前記第２のモジュールは、受信したピースの相対位置と、前記出力先のファイルで先頭位置からの順でどの相対位置までピースが書き込み済みかの状態と、を確認しながら、かつ、当該受信ピースを必要に応じて前記第２のコンピュータ内の受信バッファに蓄積しながら、前記出力先のファイルへ前記複数のピースを先頭位置からの順で書き込む処理を行い、
前記第１のモジュールは、前記入力元のファイルからデータを読み出して所定のサイズまたは数で分割して前記複数のピースとして、前記第１のコンピュータ内の送信バッファに格納する処理を行う、１つのファイル読み出しスレッドを起動し、
前記第２のモジュールは、前記複数のピースを前記出力先のファイルへ先頭位置から順に連続的なデータとして書き込む処理を行う、１つのファイル書き込みスレッドを起動し、
前記第１のモジュールは、前記複数の送信スレッドの状況をモニタして当該送信スレッドの数を調整する、第１のモニタスレッドを起動し、
前記第２のモジュールは、前記複数の受信スレッドの状況をモニタして当該受信スレッドの数を調整する、第２のモニタスレッドを起動し、
前記第１のモジュールは、初期送信スレッド数を設定し、当該初期送信スレッド数で前記複数の送信スレッドを起動し、
前記第２のモジュールは、初期受信スレッド数を設定し、当該初期受信スレッド数で前記複数の受信スレッドを起動し、
前記第１のモジュールは、前記ファイルの複数のピースの転送に関する目標量を設定し、
前記第１のモニタスレッドは、前記ファイルの複数のピースに関する現在の転送量を確認して前記目標量と比較し、目標量を超える場合は送信スレッドの数を減らし、目標量に至らない場合は送信スレッドの数を増やし、上記送信スレッドの数を増やした結果で転送量が下がった場合は送信スレッドの数を減らし、上記送信スレッドの数を一定数減らしても転送量が上がらない場合は送信スレッドの数を増やす、という調整を含む制御を行うこと、を特徴とするマルチスレッド型ファイル入出力システム。
【請求項２】
請求項１記載のマルチスレッド型ファイル入出力システムにおいて、
前記第２のモジュールにおける各々の受信スレッドは、受信したピースの相対位置と、前記出力先のファイルで次に書き込む相対位置を示す次位置と、を確認しながら、当該受信ピースが、次位置に該当しない場合は、当該受信ピースを前記第２のコンピュータ内の受信バッファに蓄積し、次位置に該当する場合は、当該受信ピースと、前記受信バッファに蓄積されている前記相対位置の順で後続する１つ以上のピースがある場合は当該後続ピースとを一緒に一括で、前記出力先のファイルの次位置から書き込む処理を行うこと、を特徴とするマルチスレッド型ファイル入出力システム。
【請求項３】
請求項１記載のマルチスレッド型ファイル入出力システムにおいて、
前記第２のモジュールは、前記第２のコンピュータ内の物理的なメモリに前記受信バッファを確保し、前記受信バッファのサイズを、設定された上限値で制限する機能を有し、
前記第２のモジュールは、前記受信バッファに蓄積されるピースのデータ量が前記受信バッファのサイズを超えた場合、バースト状態とし、
上記バーストの対処のための継続処理として、前記第１、第２のモジュールは、当該ファイル転送に関する前記出力先のファイルへ書き込み済みのピース以降のピースに関する転送処理を行う機能を有すること、を特徴とするマルチスレッド型ファイル入出力システム。
【請求項４】
請求項１記載のマルチスレッド型ファイル入出力システムにおいて、
前記第１のコンピュータの第１のアプリケーションプログラムは、前記第１のモジュールに対して第１のファイルの読み出し・送信処理を要求し、当該要求に対して前記第１のモジュールは当該第１のファイルの処理用の第１のインスタンスを生成し、
前記第２のコンピュータの第２のアプリケーションプログラムは、前記第２のモジュールに対して前記第１のファイルの受信・書き込み処理を要求し、当該要求に対して前記第２のモジュールは当該第１のファイルの処理用の第２のインスタンスを生成し、
上記構成により複数のファイルの転送処理を同時並行で可能とすること、を特徴とするマルチスレッド型ファイル入出力システム。
【請求項５】
ネットワーク上で第１、第２のコンピュータ間でファイルの入出力の処理を実行させるプログラムであり、
前記ファイルを送信する側の第１のコンピュータに、入力元のファイルからデータを読み出して分割して複数のピースとして前記ネットワークへ送信する処理をマルチスレッドの処理により行わせる第１のプログラムと、
前記ファイルを受信する側の第２のコンピュータに、前記ネットワークから前記複数のピースを受信して統合して出力先のファイルへ書き込む処理をマルチスレッドの処理により行わせる第２のプログラムと、を有し、
前記第１のプログラムは、前記分割による複数の各々のピースの送信を、割当てる複数の各々の送信スレッドにより同時並行で処理させ、
前記第２のプログラムは、前記分割による複数の各々のピースの受信を、割当てる複数の各々の受信スレッドにより同時並行で処理させ、
前記第１のプログラムは、送信するピースに、当該ファイルの送信のＩＤと、当該ファイルの先頭位置からの相対位置の情報とを付属させ、
前記第２のプログラムは、受信したピースの相対位置と、前記出力先のファイルで先頭位置からの順でどの相対位置までピースが書き込み済みかの状態と、を確認しながら、かつ、当該受信ピースを必要に応じて前記第２のコンピュータ内の受信バッファに蓄積しながら、前記出力先のファイルへ前記複数のピースを先頭位置からの順で書き込む処理を行わせ、
前記第１のプログラムは、前記入力元のファイルからデータを読み出して所定のサイズまたは数で分割して前記複数のピースとして、前記第１のコンピュータ内の送信バッファに格納する処理を行う、１つのファイル読み出しスレッドを起動させ、
前記第２のプログラムは、前記複数のピースを前記出力先のファイルへ先頭位置から順に連続的なデータとして書き込む処理を行う、１つのファイル書き込みスレッドを起動させ、
前記第１のプログラムは、前記複数の送信スレッドの状況をモニタして当該送信スレッドの数を調整する、第１のモニタスレッドを起動させ、
前記第２のプログラムは、前記複数の受信スレッドの状況をモニタして当該受信スレッドの数を調整する、第２のモニタスレッドを起動させ、
前記第１のプログラムは、初期送信スレッド数を設定し、当該初期送信スレッド数で前記複数の送信スレッドを起動させ、
前記第２のプログラムは、初期受信スレッド数を設定し、当該初期受信スレッド数で前記複数の受信スレッドを起動させ、
前記第１のプログラムは、前記ファイルの複数のピースの転送に関する目標量を設定し、
前記第１のモニタスレッドは、前記ファイルの複数のピースに関する現在の転送量を確認して前記目標量と比較し、目標量を超える場合は送信スレッドの数を減らし、目標量に至らない場合は送信スレッドの数を増やし、上記送信スレッドの数を増やした結果で転送量が下がった場合は送信スレッドの数を減らし、上記送信スレッドの数を一定数減らしても転送量が上がらない場合は送信スレッドの数を増やす、という調整を含む制御を行うこと、を特徴とするマルチスレッド型ファイル入出力プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネット等の通信ネットワークにおけるファイル（データ）の転送（入出力）の技術に関し、特に、マルチスレッド処理の技術に関する。
【背景技術】
【０００２】
インターネット等におけるファイル転送として、例えばクライアント−サーバ間で、ＨＴＴＰ／ＦＴＰ等の特定のプロトコルを用いてファイル転送処理が行われている。例えばクライアント端末に存在するファイルを、ネットワークを介してＨＴＴＰでサーバへ転送（送信）し、サーバ側に格納（書き込み）する場合（アップロード）や、あるいは、サーバに存在するファイルを、ネットワークを介してＨＴＴＰでクライアント端末へ転送（送信）し、クライアント側に格納（書き込み）する場合（ダウンロード）、等である。しかしながら、サイズ（容量）が大きなファイルを転送したい場合、ＨＴＴＰ等のプロトコルでは、元々ファイルを転送するためのプロトコルではないため、処理時間が長くなり過ぎる（処理効率）、等の問題がある。
【０００３】
サイズが大きなファイルを転送したい場合、ファイルを複数に分割してそれぞれを転送処理することが考えられる。例えばクライアント端末側は、対象ファイルを読み出して複数のピース（断片）に分割し、各々のピースをネットワークを介してＨＴＴＰ等でサーバへ転送（送信）する。サーバ側は、それら複数の各々のピースを受信し、元の１つのファイルに構成して格納する。しかしながら、インターネットでは個々のデータの遅延や紛失が発生しがちであるため、例えば上記のようにファイルの複数のピースを転送した場合に、各々のピースの受信の順序がバラバラになったり、ピースの紛失によりリトライ／再送が必要になったりする。そのため、上記ファイルを分割して転送する場合も、処理効率などの問題がある。
【０００４】
上記ファイル転送に関する先行技術例として、例えば特許文献１，２などがある。
【０００５】
特許文献１では、ｈｔｔｐ通信で大容量のファイルを送受信する場合でも、通信経路上のキャッシュ機能に負担をかけないデータ転送方法を目的とし、例えば、ＷｅｂブラウザとＷｅｂサイト間での通信で、Ｗｅｂブラウザが自動的にファイルを圧縮した後、指定サイズに分割し、各分割ファイル毎にそれぞれ別セッションでＷｅｂサイトに送信し、Ｗｅｂサイトは、送信されたファイルを統合した後に解凍する、といったことが記載されている。
【０００６】
特許文献２では、ＦＴＰプロトコルによりファイルを転送する際に、ファイルの分割数及びＴＣＰセッションの数を、ＴＣＰプロトコルのウィンドウサイズと、ネットワークの往復遅延時間及び回線速度とに基づいて決定し、この数でファイルを分割すると共にＴＣＰセッションをデータ転送用に複数確立して、データ転送を行う、といったことが記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−０１１１１９号公報（「データ転送方法」）
【特許文献２】特開平０８−３０５６４３号公報（「ファイル転送方法」）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述のように、先行技術例を含む背景技術では、ネットワーク（インターネット）上のファイルの転送（入出力）における処理効率などの問題がある。
【０００９】
上記を鑑み、本発明の主な目的は、ネットワーク（インターネット）上のコンピュータ間でのファイルの転送（入出力）に係わり、特に対象ファイルのサイズが大きい場合にも、ファイルを複数（ピース）に分割して転送する処理を行う構成において、全体的な処理効率を向上することができる技術を提供することである。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明のうち代表的な形態は、ネットワーク（インターネット）上のコンピュータ間でのファイルの転送（入出力）の処理を行う情報処理システム及びプログラムなどであって、特に対象ファイルのサイズが大きい場合にも、ファイルを複数（ピース）に分割して転送する処理を行う機能を備える構成であって、以下に示す構成を有することを特徴とする。
【００１１】
本形態のシステム（「マルチスレッド型ファイル入出力（転送）システム」）では、第１のコンピュータ（例えばクライアント端末）−第２のコンピュータ（例えばサーバ）間におけるファイル（データ）の転送（入出力）を含む処理における、ファイルの入力（読み出し）、分割、転送（送信−受信）、統合、出力（書き込み）、といった流れにおける処理において、マルチスレッド型の仕組みを適用する。即ち、対象ファイルの転送を含む処理において、分割による複数の各々のピースのデータに関する処理をマルチスレッドで並行的に行うという機能・処理部（マルチスレッド型ファイル入出力モジュール）を有する構成とする。これによりファイル転送の処理効率の向上などを図る。
【００１２】
第１、第２のコンピュータは、送信（入力）側と受信（出力）側とで対応した情報処理（例えばソフトウェアプログラム処理）を行うファイル入出力モジュールを具備する。例えばファイルを送信する側の第１のコンピュータに、送信用の第１のモジュール（ファイル入力（読み出し）、分割、ピースデータ送信、等を行う処理部）を備え、ファイルを受信する側の第２のコンピュータに、受信用の第２のモジュール（ピースデータ受信、統合（復元）、ファイル出力（書き込み）、等を行う処理部）を備える。
【００１３】
本形態のマルチスレッド型ファイル入出力システムは、ネットワーク上で第１、第２のコンピュータ間でファイルの入出力の処理を行うシステムであり、前記ファイルを送信する側の第１のコンピュータに、入力元のファイルからデータを読み出して分割して複数のピースとして前記ネットワークへ送信する処理をマルチスレッドの処理により行う第１のモジュールを備え、前記ファイルを受信する側の第２のコンピュータに、前記ネットワークから前記複数のピースを受信して統合して出力先のファイルへ書き込む処理をマルチスレッドの処理により行う第２のモジュールを備える。前記第１のモジュールは、前記分割による複数の各々のピースの送信を、割当てる複数の各々の送信スレッドにより同時並行で処理し、前記第２のモジュールは、前記分割による複数の各々のピースの受信を、割当てる複数の各々の受信スレッドにより同時並行で処理する。前記第１のモジュールは、送信するピースに、当該ファイルの送信のＩＤと、当該ファイルの先頭位置からの相対位置の情報とを付属させる。前記第２のモジュールは、受信したピースの相対位置と、前記出力先のファイルで先頭位置からの順でどの相対位置までピースが書き込み済みかの状態と、を確認しながら、かつ、当該受信ピースを必要に応じて前記第２のコンピュータ内の受信バッファに蓄積しながら、前記出力先のファイルへ前記複数のピースを先頭位置からの順で書き込む処理を行う。
【００１４】
上記構成により、前記第１のモジュールからの複数のピースの送信の順序（Ａ）と、前記第２のモジュールの前記複数のピースの受信の順序（Ｂ）とが異なる場合であっても、前記ファイルの転送を効率的に遂行する。
【発明の効果】
【００１５】
本発明のうち代表的な形態によれば、ネットワーク（インターネット）上のコンピュータ間でのファイルの転送（入出力）に係わり、特に対象ファイルのサイズが大きい場合にも、マルチスレッド処理によりファイルを複数（ピース）に分割して転送する処理を行う構成において、全体的な処理効率を向上することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施の形態のシステム（マルチスレッド型ファイル入出力モジュールを含んで成る情報処理システム（マルチスレッド型ファイル入出力システム））の概要その１を示す図である。
【図２】本実施の形態のシステムの概要その２を示す図である。
【図３】本実施の形態のシステムの機能構成例を示す図である。
【図４】本実施の形態のシステムのハードウェア・ソフトウェアの構成例を示す図である。
【図５】本実施の形態のシステムの主要処理その１として送信用モジュールの処理を示す図である。
【図６】本実施の形態のシステムの主要処理その２として受信用モジュールの処理を示す図である。
【図７】本実施の形態のシステムの機能や処理の例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。なお説明上の記号として適宜、Ｒ：読み出し、Ｗ：書き込み、Ｆ：ファイル、ｄ：ピース（断片）、Ｔ：送信スレッド、Ｕ：受信スレッド、Ａ：出力位置（ファイル先頭からの相対位置）、等とする。
【００１８】
＜特徴等＞
本発明及び実施の形態の特徴などについて以下である。
【００１９】
（１：概要）  本実施の形態のシステム（マルチスレッド型ファイル入出力システム等）では、通信ネットワークのコンピュータ間（例えばクライアント端末−サーバ間）で、マルチスレッド型のファイル転送（入出力）の処理を行うことにより、転送処理効率の向上を実現する。本システムのマルチスレッド型ファイル入出力モジュール３０（図１等）は、送信側コンピュータ１（第１のコンピュータ、例えばクライアント端末）に備える送信用モジュール（第１のモジュール）１０と、受信側コンピュータ２（第２のコンピュータ、例えばサーバ）に備える受信用モジュール（第２のモジュール）２０と、を有する構成である。本モジュール３０は、例えばクライアント端末側・サーバ側のいずれのファイル入出力にも使用される。以下、第１のモジュール１０は、Ｒクラス−Ｒインスタンスが対応し、第２のモジュール２０は、Ｗクラス−Ｗインスタンスが対応する（図３）。なおＲはReader（読み出し、入力）、ＷはWriter（書き込み、出力）を示す。クラスやインスタンスは情報処理分野の用語に基づく。
【００２０】
なお、図１の構成では、クライアント端末側に送信用モジュール１０、サーバ側に受信用モジュール２０を有し、クライアント端末からサーバへファイルを転送する場合（アップロード）の例である。逆に、クライアント端末側に受信用モジュール１０、サーバ側に送信用モジュール２０を有し、サーバからクライアント端末へファイルを転送する場合（ダウンロード）、とすることができる。クライアント端末・サーバの両方に両方のモジュール（１０，２０）を備える構成とすれば、ファイルの入力・出力の両方が可能な構成となる。
【００２１】
（２：動作）  本モジュール３０は、ファイル転送処理に係わるマルチスレッドの各スレッドから発生するファイル入出力要求に対して排他制御しながら対応する処理を行う。各スレッドが発行する入出力要求では、ファイル先頭からの相対位置（Ａ）を指定する。本モジュール３０は、指定された相対位置（Ａ）を基準に、（ファイルＦのピースｄ群の）入出力順を制御する。スレッドからの処理要求が実際のファイル処理順と異なる場合、本モジュールは、メモリ（バッファ）にピースｄをスタックし、順序を整合する。
【００２２】
例えば、５００バイトのサイズのファイルＦを１００バイトのサイズのピースｄに分割して出力する場合、出力要求は５回｛［出力位置０］，［出力位置１００］，［出力位置２００］，［出力位置３００］，［出力位置４００］｝（出力位置（Ａ）＝ファイルＦ先頭からの相対位置）発生することになる。例えば［出力位置２００］のピースが［出力位置１００］のピースよりも先に要求された場合、［出力位置２００］のピースをメモリ（バッファ）にスタックし、［出力位置１００］のピースが出力されたタイミングで［出力位置２００］のピースを出力する。
【００２３】
（３：管理機能）  本モジュール３０では、アプリケーションのプロセス内で複数のファイル入出力が同時に実行される場合を想定した管理機能（図３、６１，６２）を有する。
【００２４】
本モジュール３０を利用するアプリケーション（図３、３１，３２）は、ファイル転送処理のために生成したＲクラス及びＷインスタンスを、管理機能（６１，６２）に登録することにより、アプリケーションのプロセス内のファイル入出力を一元管理することができる。これにより、メモリ使用量の上限管理、不要なインスタンスの削除、などを一括して実施することができる。
【００２５】
（４：メモリ使用量の上限とバースト）  コンピュータ（特に受信側コンピュータ２）内のメモリ（特にメモリ５２の受信バッファ４２）にピースｄをスタックする処理において、管理機能で管理するプロセス単位の上限制限、または、ファイル毎のメモリ上限制限に抵触した場合、所定の状態（説明上「バースト」と称する）となる。当該バースト状態（処理一時中断）の以降、当該ファイルに対する転送（ピース受信等）は、すべてエラーとなる。本システムは、このバースト状態に対処可能な機能としてファイル転送の再処理（継続処理）の機能も有する。バースト状態となった場合、本システム（受信用モジュール２０）は、所定のメソッド（上記機能）を呼び出すことにより当該ファイル転送処理を継続することができる。
【００２６】
（５：管理機能のファイル出力動作）  管理機能の１つとして、（受信側における）ファイル出力処理では、出力先ファイル（図１の５）へ直接ピースｄデータを書き込み処理するのではなく、間にテンポラリフォルダ（一時ファイル）を設け、テンポラリフォルダにＧＵＩＤ（一意な識別情報）をファイル名として出力し、すべての出力が終了した時点で出力先（図１の５）に移動させる方式（公知技術）を採用してもよい。管理機能により実行するファイル出力処理は長時間化する可能性も考えられるため、出力途中のファイル（図１の５）を他のアプリケーションから参照されることを避けるための対応として、上記方式は有効である。上記ファイルの移動は、同一ドライブ内であれば高速（インデックス付け替えのみ）であるため、上記テンポラリフォルダと出力先ファイル（図１の５）は同一ドライブに設定すると好ましい。
【００２７】
＜実施の形態＞
以下、図１〜図７を用いて、本実施の形態のシステム（マルチスレッド型ファイル入出力モジュールを含んで成る情報処理システム（マルチスレッド型ファイル入出力システム））について説明する。図１，図２は、本実施の形態の概要等をわかりやすく示している。図３，図４は、機能構成や実装構成、各要素の関係などを示している。図５，図６は、主要処理を示している。図７は、応用的な機能や処理の例などを示している。
【００２８】
［概要１］
図１を用いて、本実施の形態の概要その１（複数のピースｄの順序を考えない所まで）について説明する。
【００２９】
本システム全体は、送信側コンピュータ１と、受信側コンピュータ２とが、ネットワーク（インターネット）３を介して接続される構成である。送信側コンピュータ１は例えばユーザのクライアント端末であり、受信側コンピュータ２は例えばサーバ（サーバ装置）である。送信側コンピュータ１は、転送（入出力）対象のファイルＦ（４）の送信（入力）側であり、受信側コンピュータ２は、当該ファイルＦ（５）の受信（出力）側である。
【００３０】
そして本システムは、送信側コンピュータ１と受信側コンピュータ２とで対応した情報処理（ソフトウェアプログラム処理による実現）を行うマルチスレッド型ファイル入出力モジュール３０｛送信用モジュール１０，受信用モジュール２０｝を具備する。送信側コンピュータ１に送信用モジュール１０を備え、受信側コンピュータ２に受信用モジュール２０を備える。送信用モジュール１０は、入力元のファイル５のデータの入力（読み出し）、分割、ピースｄの送信、等の処理をマルチスレッドで行う処理部である。受信用モジュール２０は、ピースｄの受信、統合、出力先のファイル５へのデータの出力（書き込み）、等の処理をマルチスレッドで行う処理部である。第１のモジュール１０、第２のモジュール２０の各々の処理は独立しているが、第１のモジュール１０−第２のモジュール２０間で対応・連携した処理が自動的に実現される仕組みである。図１では省略しているが各コンピュータ（１，２）で稼働するアプリケーション等（図３）が本モジュール３０（１０，２０）を使用して所定のファイルＦ転送の処理を行う。
【００３１】
図１のようにクライアント端末（１）側に送信用モジュール１０、サーバ（２）側に受信用モジュール２０を有する場合は、クライアントからサーバへのファイルＦの転送（アップロード）を行うことができ、逆に、クライアント端末側に受信用モジュール２０、サーバ側に送信用モジュール１０を有する構成とすれば、サーバからクライアントへのファイルＦの転送（ダウンロード）を行うことができる。また、クライアントとサーバのそれぞれに両方のモジュール（１０，２０）を有する構成とすれば、両方向の転送を行うことができる。いずれも基本的な仕組みは同じであるため以下では図１のような構成の場合で説明する。
【００３２】
ファイルＦ（入力ファイル）４は入力元を示し、ファイルＦ（出力ファイル）５は出力先を示す。入力ファイル４の全データを出力ファイル５へ転送して書き込みを完了することが、本モジュール３０を用いた本処理の目的である。なお入力ファイル４及び出力ファイル５は、例えば、指定のパス（アドレス）による指定のドライブのデータファイルである。
【００３３】
送信側コンピュータ１（送信用モジュール１０）における処理により、送信側のファイル４は、複数のピースｄ（例：ｄ１〜ｄｍ）に分割される（送信バッファ４１に格納される）。ファイルＦ全体のサイズをｓＦ、分割のサイズ（ピースサイズ）をｓｄとする。ｍは、ファイルＦの分割数（ピース数）とする。また、出力位置Ａ（ファイルＦ先頭からの相対位置）に間して、各ピースｄ１〜ｄｍの出力位置ＡをＡ１〜Ａｍとする。例えばｓＦ＝５００、ｓｄ＝１００の場合（ｍ＝５）、各ピースｄ１〜ｄ５の出力位置Ａは｛Ａ１＝０，Ａ２＝１００，Ａ３＝２００，Ａ４＝３００，Ａ５＝４００｝である。
【００３４】
送信用モジュール１０は、ファイルＦ（ピースｄ１〜ｄｍ）の転送（送信）のために複数のスレッド（送信スレッド）Ｔを起動、割当する。例えば送信スレッドＴ１〜Ｔｔとする。ｔは送信スレッド数とする。ｍとｔは独立であり状況に応じて可変の値であるが（後述）、図１の例では簡単にｍ＝ｔである（ピースｄと送信スレッドＴとが１対１の関係）。
【００３５】
送信側から各送信スレッドＴにより各ピースｄがネットワーク３を介して受信側へ転送（送信）される。各送信スレッドＴが発行する入出力要求では、当該ピースｄに関してファイルＦ先頭からの相対位置Ａなどを指定する。本モジュール３０（１０，２０）は、指定された相対位置（Ａ）を基準に、複数のピースｄの入出力順を制御する。
【００３６】
ネットワーク３上を転送される各ピースｄのデータ６には、情報として、対象ファイルＦ毎の送信ＩＤ（ｆとする）、出力位置Ａ、等の情報を付属させる（例えばヘッダで記述）。送信ＩＤ（ｆ）は、対象ファイルＦ（４）の送信（転送）処理ごとに付けられるＩＤ（一意な識別情報）である。「送信ＩＤ」が同じものは同じファイル転送処理であると認識される。出力位置Ａは、ファイルＦの先頭からの相対位置を示す情報である。また、ファイルサイズｓＦや、ピースサイズｓｄ等の各種の情報を付属させてもよい。
【００３７】
なお、送信側（１，１０）、ネットワーク３、受信側（２，２０）の状況などに応じて、上記ファイル転送処理における複数のピースｄの順序（入出力順）は変動し得る（図２）。
【００３８】
一方、受信側コンピュータ２の受信用モジュール２０では、ファイルＦ（ピースｄ１〜ｄｍ）の転送（受信）のために複数のスレッド（受信スレッド）Ｕを起動、割当する。例えば受信スレッドＵ１〜Ｕｕとする。ｕは受信スレッド数とする。ｕは、ｍ，ｔと同様に独立、可変の値であるが、図１の例では簡単にｔ＝ｕである。送信スレッドＴと受信スレッドＵとの対応関係は動的割当で決まるため１対１関係ではない（それぞれ独立したマルチスレッド）。
【００３９】
受信用モジュール２０は、ネットワーク３を介した各ピースｄデータの受信に応じて受信スレッドＵによる処理を行う。受信用モジュール２０は、相対位置（Ａ）を基準に、複数のピースｄの出力順を制御する。受信用モジュール２０の処理により、受信される複数の各ピースｄ１〜ｄｍのデータは、当該ピースｄの出力位置Ａ等の情報に基づいて、必要に応じて、受信バッファ４２に蓄積（スタック）され、そして複数のピースｄの順序が整合され、出力ファイル５として統合、書き込みされる。
【００４０】
［概要２］
図２を用いて、図１に続き、本実施の形態の概要その２（複数のピースｄの順序を考え、ファイル転送処理を完了する所まで）について説明する。
【００４１】
図２の例では、送信ＩＤ（ｆ）＝ｆ１，ファイルサイズ（ｓＦ）＝５００のファイルＦ（４）の送信処理に関して、ｍ＝５，ｓｄ＝１００による複数のピースｄ１〜ｄ５を、ｔ＝５の送信スレッドＴ（Ｔ１〜Ｔ５）により送信処理する場合とする。送信側コンピュータ１からの送信時点のピースｄの送信順序（順序Ａ）が例えば｛ｄ１，ｄ２，ｄ３，ｄ４，ｄ５｝とする（出力位置Ａが小さい順である）。
【００４２】
ネットワーク３の状況などにより、複数のピースｄの転送の順序が変動し、受信側コンピュータ２での受信時点の順序（順序Ｂ）が、例として｛ｄ１，ｄ４，ｄ３，ｄ２，ｄ５｝とする。
【００４３】
受信用モジュール２０において、複数の各々の受信スレッドＵ（例えばｕ＝５のＵ１〜Ｕ５）は、自身が受信したピースｄデータについて、その情報｛ｆ，Ａ等｝を参照し、ファイルＦ処理順（例えば順序Ａ）に対して異なる場合、目的のファイルＦ（５）（例えばディスク領域）に出力（書き込み）せずに、受信バッファ４２に一旦スタックする。そして、上記スタックを利用して、複数のピースｄの順序を整合させる。特に出力位置Ａの情報をみることで、順序を整合させることができる。
【００４４】
また、受信用モジュール２０は、出力ファイルＦ（５）に対して、先頭からどの相対位置Ａ（ピースｄ）まで書き込み済みであるか、ないしは次に書き込むべき相対位置Ａ（ピースｄ）、等を情報として管理する。これを「次位置Ｘ」とする。最初の次位置Ｘ１はＡ＝０である。
【００４５】
送信用モジュール１０−受信用モジュール２０間で、以下、ｓ１〜ｓ５のような順の処理となる。なお各ピースｄ内の括弧の値は、出力位置Ａの値を示す。
【００４６】
（ｓ１）  まず、第１の受信スレッドＵ１では、第１のピースｄ１（Ａ１＝０）を受信したとする。ｄ１については、元の順序Ａに従っており最初にファイル５に出力（書き込み）すべきピースであるため、受信バッファ４２にスタックせずに、直接、ファイル５の領域に出力（書き込み）する。この時点で、次位置Ｘ２は、Ａ２＝１００のピースｄ２になる。
【００４７】
（ｓ２）  次に、第４の受信スレッドＵ４では、第４のピースｄ４（Ａ４＝３００）を受信したとする。この場合、当該ピースｄ４は、次位置Ｘ２（＝Ａ２）ではないため、当該ピースｄ４を受信バッファ４２にスタックする。
【００４８】
（ｓ３）  次に、第３の受信スレッドＵ３では、第３のピースｄ３（Ａ３＝２００）を受信したとする。この場合、当該ピースｄ３は、次位置Ｘ２（＝Ａ２）ではないため、当該ピースｄ４を受信バッファ４２にスタックする。受信バッファ４２には、ｄ４，ｄ３がスタックされた状態となる。
【００４９】
（ｓ４）  次に、第２の受信スレッドＵ２では、第２のピースｄ２（Ａ２＝１００）を受信したとする。この場合、当該ピースｄ２は、次位置Ｘ２（＝Ａ２）に該当するピースであるため、受信バッファ４２にスタックせずに、直接、ファイル５の領域に出力（書き込み）する。この際、受信バッファ４２にスタックされているピースｄ（ｄ４，ｄ３）において、受信ピースｄ（ｄ２）に位置（Ａ）が後続するピースｄ（ｄ３，ｄ４）が有る場合は、受信ピースｄ（ｄ２）とこれら後続ピースｄ（ｄ３，ｄ４）とを一緒に、一括で、ファイル５の領域に出力（書き込み）する。即ち、ｓ１で書き込み済みのｄ１の後の位置（Ｘ２＝Ａ２）から｛ｄ２，ｄ３，ｄ４｝のデータをまとめて書き込む。これにより、ｄ１〜ｄ４までファイル５に書き込み済みの状態となり、次位置Ｘ３はＡ５となる。
【００５０】
（ｓ５）  その後、第５の受信スレッドＵ５では、第５のピースｄ５を受信したとする。この場合、当該ピースｄ５は、次位置Ｘ３（＝Ａ５）に該当するピースであるため、受信バッファ４２にスタックせずに、直接、ファイル５の領域に出力（書き込み）する。これにより、ｄ１〜ｄ５までのすべてのピースが目的のファイルＦ（５）に書き込まれた状態となる。
【００５１】
上記のように、受信側（２０）では、出力（書き込み）済みのピースｄに後続する位置（Ａ）のピースｄが来ると、そのタイミングで、受信バッファ４２のスタック済みデータも含めてまとめてピースｄデータが出力（書き込み）される。このような仕組みにより、複数のピースｄの順序が変動していても、効率的に整合させることができる。よって、目的のファイルＦに対する出力（書き込み）処理の効率が良くなる。
【００５２】
［基本構成］
図３は、本システムの基本的な機能構成を示している。図４は、対応するハードウェア・ソフトウェア構成例を示している。
【００５３】
送信側コンピュータ１は、アプリケーション３１、記憶装置７１に格納されている転送対象となる入力ファイル（Ｆ）４、送信用モジュール１０（管理機能６１を含む）、送信バッファ４１が確保されるメモリ５１、等を有する。受信側コンピュータ２は、アプリケーション３２、記憶装置７１に格納される転送対象となる出力ファイル（Ｆ）５、受信用モジュール２０、受信バッファ４２が確保されるメモリ５２、等を有する。
【００５４】
アプリケーション３１は、本モジュール１０を用いたファイル転送処理を要求するプログラム（プロセス）であり、対象ファイルＦの転送処理ごとに、送信用モジュール１０のＲクラスを用いてＲインスタンスを形成する。アプリケーション３１は、ファイルＦの転送の際には送信用モジュール１０を呼び出して（処理要求して）制御を渡す。受信側（２０）のアプリケーション３２も同様である。
【００５５】
本モジュール３０は、マルチスレッド型のファイル入出力（転送）に係わるクラス（インスタンスを生成するためのクラス）として、送信用モジュール１０における送信用クラス（Ｒクラス」）と、受信用モジュール２０における受信用クラス（Ｗクラス）と、を有する。それぞれ、ファイル転送処理単位ごとに、実処理用のインスタンス（Ｒインスタンス、Ｗインスタンス）を生成する。
【００５６】
送信用モジュール１０は、プログラム処理により実現され、アプリケーション３１からのファイルＦの転送（ないし読み出し・入力、送信等）の要求に応じて、Ｒクラスから当該ファイル処理単位のＲインスタンスを生成・割当てして稼働させる。送信用モジュール１０は、生成したＲインスタンスの情報を管理機能６１（登録部１２）に登録する。Ｒインスタンスは、マルチスレッド｛Ｔ０，ＴＭ，Ｔ１〜Ｔｔ｝を制御する。
【００５７】
受信用モジュール２０は、プログラム処理により実現され、アプリケーション３２からのファイルＦの転送（ないし受信、書き込み・出力等）の要求に応じて、Ｗクラスから当該ファイル処理単位のＷインスタンスを生成・割当てして稼働させる。受信用モジュール２０は、生成したＷインスタンスの情報を管理機能６２（登録部２２）に登録する。Ｗインスタンスは、マルチスレッド｛Ｕ０，ＵＭ，Ｕ１〜Ｕｕ｝を制御する。
【００５８】
送信用モジュール１０は、送信側コンピュータ１の物理的なメモリ５１内に、上記ファイル転送処理用の送信バッファ４１を確保する。メモリ５１内に確保される送信バッファ４１のサイズ（容量）は、設定される上限値（ｘ）による大きさである。受信用モジュール２０は、受信側コンピュータ２の物理的なメモリ５２内に、上記ファイル転送処理用の受信バッファ４２を確保する。メモリ５２内に確保される受信バッファ４２のサイズ（容量）は、設定される上限値（ｙ）による大きさである。
【００５９】
図４において、第１、第２のコンピュータ（１，２）ともに、図示しないがＯＳ上でマルチスレッドが稼働可能な構成である。
【００６０】
送信側コンピュータ１（クライアント端末）は、プロセッサ４０１、メモリ４０２、記憶装置４０３、通信Ｉ/Ｆ装置４０４、入力装置４０５、出力装置４０６などを備える。プロセッサ４０１は、ディスク等の記憶装置４０３からアプリケーションプログラム４１２のコードをメモリ４０２（５１）に読み出して実行することにより、アプリケーション３１のプロセスを実現する。また、プロセッサ４０１は、記憶装置４０３から制御プログラム４１１のコードをメモリ４０２（５１）に読み出して実行することにより、送信用モジュール１０のＲインスタンスを含むマルチスレッド処理を実現する。また記憶装置４０３に格納されている対象入力ファイル４のデータがメモリ４０２（５１）の送信バッファ４１に読み出されて処理される（Ｔ０）。
【００６１】
受信側コンピュータ２（サーバ）は、プロセッサ５０１、メモリ５０２、記憶装置５０３、通信Ｉ/Ｆ装置５０４、入力装置５０５、出力装置５０６などを備える。プロセッサ５０１は、ディスク等の記憶装置５０３からアプリケーションプログラム５１２のコードをメモリ５０２（５２）に読み出して実行することにより、アプリケーション３２のプロセスを実現する。また、プロセッサ５０１は、記憶装置５０３から制御プログラム５１１のコードをメモリ５０２（５２）に読み出して実行することにより、受信用モジュール２０のＷインスタンスを含むマルチスレッド処理を実現する。またメモリ５０２（５２）の受信バッファ４２に格納されたデータは、記憶装置５０３に格納される対象出力ファイル５へ書き込み処理される（Ｕ０）。
【００６２】
送信用モジュール１０（各送信スレッドＴ）は、通信Ｉ/Ｆ装置４０４を用いてピースｄデータ６をネットワーク３送信処理する。受信用モジュール２０（各受信スレッドＵ）は、通信Ｉ/Ｆ装置５０４を用いてピースｄデータ６をネットワーク３受信処理する。
【００６３】
［管理機能］
図３で、管理機能６１は、送信用モジュール１０の一部として有する。管理機能６２は、受信用モジュール２０の一部として有する。なお管理機能６１，６２は、別のモジュールとして構成されてもよい。例えば、モジュール１０，２０の上位に管理・制御用の第３のモジュールなどを追加して備えてもよい（例えば複数のファイル転送処理の管理・制御用など）。
【００６４】
送信側（１０）の管理機能６１として、設定部１１、登録部１２、上限管理部１３、バースト対処部１４、等を有する。受信側（２０）の管理機能６２として、設定部２１、登録部２２、上限管理部２３、バースト対処部２４、等を有する。
【００６５】
その他、管理機能（６１，６２）は、バッファ（４１，４２）の不要なデータのクリアや、不要インスタンスの一括削除などの処理機能を有する。また、ネットワーク通信における公知技術であるリトライ（再送）などの処理機能を有する。
【００６６】
設定部１１，２１は、それぞれ、前述の各種可変の設定値（例えば送信側（１０）のｍ，ｓｄ，ｘ，ｔ０等）の設定処理を行う。
【００６７】
登録部１２，２２は、それぞれ、アプリケーション（３１，３２）からの要求に応じてクラスからインスタンスを生成（起動）・割当した場合の情報を登録・管理する。
【００６８】
上限管理部１３，２３は、それぞれ、ファイル転送処理に係わるメモリ５１，５２の使用量の上限を管理する。即ちメモリ５１，５２に確保されるバッファ（４１，４２）のサイズの上限値（ｘ，ｙ）を管理する。上限値（ｘ，ｙ）は設定部１１．２１から設定可能とする。
【００６９】
バースト対処部１４，２４は、それぞれ、受信側（２０）でバーストが発生した場合の対処処理を行う。対処処理として、継続処理などの機能を含む（後述）。送信側（１０）では、送信バッファ４１がピースｄデータの格納により上限値ｘに達した場合、当該ファイル転送処理を一時停止する。受信側（２０）では、受信バッファ４２がピースｄデータの格納により上限値ｙを超えた場合、「バースト」状態として、バースト対処処理を起動する（２４を用いる）。
【００７０】
［処理シーケンス］
図５，図６において、本システムの主要処理を説明する。送信側（１，１０）の処理（図５）と、受信側（２，２０）の処理（図６）とは、独立した処理であり、対応した所定の内容の処理アルゴリズムを有している。複数の各々のスレッドの処理では、自スレッドの処理を所定の処理アルゴリズムに従って実行すればよい（送信側と受信側とで同期的な制御情報通信などは不要である）。これにより全体的・自動的にファイル転送処理が遂行される仕組みである。なお例えばＳ１０２とＳ２０２では、送信側（１０）−受信側（２０）間でピースデータ６の転送等が行われる。またＳ１０４とＳ２０７では、送信側（１０）−受信側（２０）間でピースデータ６の転送等が行われる。
【００７１】
（Ｓ１０１）  図５において、送信側コンピュータ１のアプリケーション３１（そのプロセス）は、対象の入力ファイル４の転送処理を送信用モジュール１０に要求する。
【００７２】
（Ｓ１０２）  送信用モジュール１０は、要求に対して、当該ファイル４処理用のＲインスタンスを生成・登録し、割当てるマルチスレッド｛Ｔ０，ＴＭ，Ｔ１〜Ｔｔ｝による処理（以下）を開始する。また当該ファイル転送処理を識別する送信ＩＤ（ｆ）も設定する。送信用モジュール１０はマルチスレッド｛Ｔ０，ＴＭ，Ｔ１〜Ｔｔ｝を排他制御する。なおＳ１０２の時点で受信側（２０）では特に何も処理を開始する必要は無い。
【００７３】
ファイル読み出しスレッドＴ０により、入力ファイル４からデータ（分割ピースサイズｓｄごとのデータ）を順次に読み出し、複数のピースｄ（ｄ１〜ｄｍ）として、送信バッファ４１へ格納（登録）する。
【００７４】
送信ピースｄ（ｄ１〜ｄｍ）毎に送信スレッドＴ（Ｔ１〜Ｔｔ）を割当てる。割当てる送信スレッドＴの初期数はｔ０である。各送信スレッドＴは、送信バッファ４１から１ピースｄデータを取り出し、必要な情報｛ｆ，Ａ，…｝を付属させてピースｄデータ６を形成し、ネットワーク３へ送信処理する。送信スレッドＴによるピースｄデータ６送信処理では、ピースｄ自体に加えて付属する情報として、送信ＩＤ（ｆ），出力位置Ａを含む。送信スレッドＴは、１ピースｄの送信が終わると他ピースｄがある場合はその送信にとりかかることができる（ｍ＞ｔの場合）。
【００７５】
（Ｓ１０３）  送信用モジュール１０は、モニタスレッドＴＭにより複数の送信スレッドＴ１〜Ｔｔの状況をモニタしながら、適宜、送信スレッド数（ｔ）を調整する。
【００７６】
（Ｓ１０４）  送信側（１０）は、すべての送信スレッドＴで対象ファイルＦ（４）のすべてのピースｄ（ｄ１〜ｄｍ）を読み出し・送信し、ファイルＦの転送を終了する。全ピースｄの送信が終了すると、送信側（１０）は「終了」通知を受信側（２０）へ送信する。この「終了」通知では、当該ファイルＦに対応する送信ＩＤ（ｆ）情報と、当該ファイルＦのファイル名などの情報と、が指定され、付属する。
【００７７】
また送信側（１０）は、受信側（２０）から「完了」通知を受け取ると、本ファイル転送処理を完了する。
【００７８】
また送信側（１０）は、受信側（２０）からリトライ要求を受けた場合は、要求・指定されたピースｄデータを対応する送信スレッドＴにより受信側（２０）へ再送する。
【００７９】
また送信側（１０）は、受信側（２０）からバースト対処（継続処理）の要求を受けた場合は、バースト対処部１４を用いて、要求・指定されたピースｄデータ群を対応する送信スレッドＴ群により受信側（２０）へ送信する。
【００８０】
（Ｓ２０１）  図６において、受信側コンピュータ２のアプリケーション３２は、対象の出力ファイル（Ｆ）５の転送処理を受信用モジュール２０に要求する。
【００８１】
（Ｓ２０２）  受信用モジュール２０は、要求に対して、当該ファイル５処理用のＷインスタンスを生成・登録し、割当てるマルチスレッド｛Ｕ０，ＵＭ，Ｕ１〜Ｕｕ｝による処理（以下）を開始する。受信用モジュール２０はマルチスレッド｛Ｕ０，ＵＭ，Ｕ１〜Ｕｔ｝を排他制御する。
【００８２】
受信側（２０）は、送信側（１０）からのピースｄを受信すると、受信ピースｄ毎に受信スレッドＵ（Ｕ１〜Ｕｕ）を割当てる。各受信スレッドＵ（Ｕ１〜Ｕｎ）によりネットワーク３から各ピースｄ（ｄ１〜ｄｍ）のデータ６（情報｛ｆ，Ａ，…｝が付属）を受信処理する。ファイル書き込みスレッドＵ０により、複数のピースｄデータを統合して出力ファイル５へ書き込む処理を行う。Ｕ０を用いて、ファイル５の次位置Ｘから順に連続的にピースｄデータを書き込むように制御する。詳しくはＳ２０３以下のようになる。
【００８３】
（Ｓ２０３）  受信用モジュール２０では、（送信側（１０）と同様に）モニタスレッドＵＭにより受信スレッドＵ１〜Ｕｕの状況をモニタし、適宜、受信スレッド数（ｕ）を調整する。
【００８４】
各受信スレッドＵは、受信ピースｄの付属情報｛ｆ，Ａ，…｝を参照し、対応ファイルＦや、当該ピースｄの出力位置Ａやサイズｓｄなどを確認する。同じ送信ＩＤ（ｆ）のものは同じファイル転送処理として取り扱う。ここで、受信用モジュール２０で、各受信スレッドＵは、目的（出力先）のファイル５に先頭位置から順に連続的にピースｄデータを書き込むための、次位置Ｘの情報を管理・確認しながら、以下の分岐に応じた処理を行う。
【００８５】
（Ｓ２０４）  各受信スレッドＵは、受信ピースｄの出力位置Ａが次位置Ｘに該当するか否かを判断する。次位置Ｘに該当する場合（Ｙ）はＳ２０５の処理を行い、該当しない場合（Ｎ）はＳ２０６の処理を行う。
【００８６】
（Ｓ２０５）  受信スレッドＵは、受信ピースｄと、当該ピースｄに位置（Ａ）が後続する一連のピースｄ（１つ以上）が受信バッファ４２にスタックされている場合は当該一連のピースｄ（１つ以上）とを、一括で、直接、出力ファイル５の次位置Ｘから書き込むようにする。受信バッファ４２にスタックされている該当ピースｄが無い場合は単に受信ピースｄを直接ファイル５に書き込むだけである。上記ファイル５への書き込み処理は、ファイル書き込みスレッドＵ０により行われる。次位置Ｘの例は図２に示している。
【００８７】
（Ｓ２０６）  受信スレッドＵは、受信ピースｄを受信バッファ４２にスタック（蓄積）する。この時点では次位置Ｘからのピースｄがまだ受信側（２０）に無いため、当該受信ピースｄをファイル５に書き込まずに受信バッファ４２にスタックする。
【００８８】
（Ｓ２０７）  受信用モジュール２０は、すべての受信スレッドＵ（Ｕ１〜Ｕｕ）で対象ファイルＦのすべてのピースｄを受信し、Ｔ０により出力ファイルＦ（５）への書き込みが終了し、送信側（１０）からの「終了」通知を受信すると、最後に「完了」通知を受信側（１０）へ送信する。「完了」通知には、送信ＩＤ（ｆ）などの情報を付属させる。受信側（２０）は、当該ファイル出力処理を終了し、当該ファイルＦ（５）のファイル名を変更する。即ち送信側（１０）から「終了」通知で指定されたファイル名へ変更して確定する。
【００８９】
［各種スレッド、スレッド数］
上述のように、送信側（１０）、受信側（２０）において、それぞれ、マルチスレッド構成として、いくつかの種類のスレッドを有する。以下、送信側（１０）のマルチスレッド構成を説明するが、受信側（２０）においても基本的に同様の考え方である。
【００９０】
送信側（１０）において、個別のファイルＦ転送処理（送信ＩＤ（ｆ）単位）ごとのマルチスレッド処理として、１つのファイル読み出しスレッドＴ０と、１つのモニタスレッドＴＭと、複数（ｔ）の送信スレッドＴと、が起動される。ファイル読み出しスレッドＴ０は、起動により、入力ファイルＦ（４）のデータを複数のピースｄ（ｄ１〜ｄｍ）として送信バッファ４１へ読み込む処理を行う。なお、Ｔ０を単数とする理由は、一般に１つのスレッドのファイルオープン処理に時間がかかるためである。仮に複数のスレッドでファイルのデータを読み込むためには、これらスレッド数分ファイルオープン処理が必要になるため時間がかかる。１つのファイル読み出しスレッドＴ０でファイルデータ読み出し処理（１回のオープン）を行い、かつ複数の送信スレッドＴにより各ピースの送信処理を行うことも、本構成の１つの特徴である。
【００９１】
受信側（２０）では、ファイル５を書き込むコンポーネント（ファイル書き込みスレッドＵ０）が複数の受信スレッドＵから独立して存在し、当該コンポーネント（Ｕ０）がファイル出力（書き込み）処理を行う。これにより出力ファイル５は１つのコンポーネント（Ｕ０）から実施されるため、ファイルオープンは１回となる。
【００９２】
送信スレッドＴ（Ｔ１〜Ｔｔ）により、それぞれ送信バッファ４１からピースｄ（ｄ１〜ｄｍ）のデータを読み出して情報｛ｆ，Ａ，…｝を付属させてネットワーク３への送信処理を行う。
【００９３】
モニタスレッドＴＭは、送信スレッドＴと共に起動され、送信スレッドＴの状況をモニタする。モニタスレッドＴＭの制御により、送信状況に応じて、送信スレッドＴの数ｔを動的に変動させる。この送信スレッド数ｔは、環境設定や、モニタスレッドＴＭによる調整などに応じて決定される。例えば、最初（ファイル転送処理開始時）は送信スレッド数ｔを一定数（ｔ０）にする。そして、モニタスレッドＴＭにより、ネットワーク通信・転送の状況などをみながら、必要に応じて数ｔが調整（増減）される。例えば処理性能不足と判断した場合は１つ以上の送信スレッドＴを追加し、処理性能過剰と判断した場合は１つ以上の送信スレッドＴを休眠し、あるいは、処理性能不足と判断した場合は１つ以上の休眠中の送信スレッドＴを起動し、といった制御をする。送信スレッド数ｔなどを適切に調整することにより、処理効率の向上などを図る。
【００９４】
分割のピースｄの数ｍ（ないし分割ピースサイズ（ｓｄ）等）と、送信スレッド数ｔとは、独立・可変の値である。例えばｍ＞ｔの場合、まず送信スレッドＴ１〜Ｔｔによりｔ個分のピースｄを送信処理し、そのうちある送信スレッドＴによるあるピースｄの送信が終われば、次に残りの（ｍ−ｔ）分のうちのあるピースｄの送信処理にとりかかることができる（多重処理）。
【００９５】
本システムでは、ファイル転送処理の効率については、概ね、送信スレッドＴの数ｔにより決定（調整）することができる。実際の転送では、ネットワーク３環境とその状態などに依存し、同じネットワーク３であってもその状態により大きく通信効率が異なる。また、例えばスレッドの多重度を上げすぎると、逆にネットワーク３内の通信量を増やし、通信効率が落ちてしまう。また、当該ファイル転送が、あまりにもネットワークリソースを消費すると、他の処理に影響してしまう。
【００９６】
上記を考慮して、以下のように制御してもよい。本システムの管理・設定情報として、送信側（１０）において、「目標転送量」（ｒ）、「ピースサイズ」（ｓｄ）、「初期送信スレッド数」（ｔ０）、などを設定する（可変設定可能）。「目標転送量」（ｒ）は、例えば１秒間に何バイト転送したいかを規定する情報である。
【００９７】
転送開始時の送信スレッド数ｔは、上記初期送信スレッド数ｔ０にする。その後、前述のモニタスレッドＴＭにより現在の転送量などを確認しながら、例えば現在の転送量が目標転送量ｒを超えている場合は、送信スレッド数ｔを少なくするために、例えば１つ以上の送信スレッドＴを休眠させる。また目標転送量ｒに至っていない場合は、送信スレッド数ｔを増やすために、例えば、休眠状態の送信スレッドがある場合は当該休眠スレッドを起動し、あるいは、新規に１つ以上の送信スレッドＴを追加する。また、送信スレッドＴを増やしたにも関わらず、逆に転送量が下がった場合には、当該送信スレッドＴを休眠させる。それでも転送量が下がる場合には、更に送信スレッドＴを休眠させる。また、一定回数以上送信スレッド数ｔを下げても転送量が上昇しない場合は、送信スレッド数ｔを増やしてみる。モニタスレッドＴＭによりこのような調整を常時繰り返すことにより、転送効率の最適化を図る。
【００９８】
なお、送信用モジュール１０における、ファイル読み出しスレッドＴ０、及びモニタスレッドＴＭについては、送信スレッドＴとは独立させた別の機能（モジュール）として構成してもよい。受信用モジュール２０（Ｕ０，ＵＭ）についても同様である。
【００９９】
［複数ファイル転送処理］
また本モジュール３０（１０，２０）は、応用的な形として、アプリケーション３１，３２のプロセス内で複数のファイルＦの入出力（転送）を同時並行的に実行する場合にも対応可能な実装（管理機能６１，６２）を有する。
【０１００】
図７中に例を示している。第１のファイルＦ１の入出力処理＃１（７０１）（送信ＩＤ：ｆ１）と、第２のファイルＦ２の入出力処理＃２（７０２）（送信ＩＤ：ｆ２）と、を同時並行的に実行する場合である。ファイル転送処理単位（送信ＩＤ）ごとに、それぞれ、対応するインスタンスやバッファ（４１，４２）が割当される。これらの情報は例えば登録部１２，２２を用いて管理される。複数のファイル転送処理に係わるＲ，Ｗインスタンスの情報を一元管理することにより、アプリケーション３１，３２のプロセス内の複数のファイル入出力処理の全体を把握して適切に制御する。
【０１０１】
［バッファ上限管理］
管理機能６１，６２の上限管理部１３，２３を用いて、各バッファ（４１，４２）のサイズを上限値ｘ，ｙにより制限する仕組みを有する。この制限により、メモリ５１，５２リソース消費の抑制などを実現する。上限値ｘ，ｙの設定は、例えば、アプリケーション３１，３２のプロセス単位の設定値や、あるいは、ファイルＦ毎の設定値、などが可能である。また例えば、対象ファイルＦのサイズが通常よりも大きい場合などには、上限値が大きくなるように設定を変更することにより、柔軟に対応が可能である。
【０１０２】
［バースト対処］
受信バッファ４２にスタック（蓄積）されるピースｄデータ量が上限値ｙを超えてしまう場合（状態）を本明細書では「バースト」と称する。このバースト状態になった時は、以降、基本的には、当該ファイル転送処理に関するピースｄの処理に関してすべてエラー（処理一時中断など）にする。そして、バースト対処部１４，２４を用いて対処処理を起動する。
【０１０３】
ネットワーク３の状況などに応じてバーストが発生し得る。例えば、送信側（１０）が受信側（２０）へのピースｄデータの到達を認識していない場合などに発生しやすい。図２の例で言えば、例えば第２のピースｄ２が受信側（２０）へ到達しないまま、第３のピース以降が送信されてしまう場合、それらのピース群が受信バッファ４２にスタックされるので、当該ピースデータ量によって上限値ｙを超えてしまう可能性がある。
【０１０４】
管理機能６１，６２は、ファイル転送のバースト時に関するバースト対処部（継続処理部）１４，２４を有する。ある送信ＩＤのファイル転送処理でバーストになった時は、本処理を呼び出して実行することにより、当該ファイル転送処理に関するバーストによるエラー（処理一時中断）状態からの継続処理（再処理）を行うことができる。継続処理とは、新規ファイル送信（転送）処理ではなく、受信側（２０）のバーストなどによって不完全なまま中断した処理を継続・再開する処理を指している。
【０１０５】
本実施の形態のバースト対処処理における継続処理として以下がある。
【０１０６】
第１の継続処理例として、受信側（２０）でバーストが発生した場合、出力ファイル５へ未出力（未書き込み）分のピースｄの転送処理を、送信側（１０）−受信側（２０）間で行う。図７中に例示しており、ｓ１５のピースｄの分の処理に相当する。またバースト分に対応した不要なインスタンスを削除する。
【０１０７】
受信用モジュール２０（２４）は、バースト時、当該時点までに出力ファイル５へ正常に出力（書き込み）済みの分のピースｄデータを一旦ファイルとして確定させる。受信バッファ４２にスタックされている分のピースｄ、未到達分のピースｄ、及びバースト（上限値ｙ超え）分のピースｄデータについては無視ないし削除する。
【０１０８】
受信側（２０）は、バースト対処部２４により、継続処理の要求（指示）を送信側（１０）へ通知する。これに対し、送信側（１０）のバースト対処部１４は、要求に従い、バースト対処のための継続処理を実行する。
【０１０９】
送信側（１０）は、継続処理として、受信側（２０）で不足分（上記確定分以外、即ち、次位置Ｘ以降の分）のピースｄデータの送信処理を、前述の初期開始時のマルチスレッド処理と同様に行う。前述の初期開始時のマルチスレッド送信処理と同様に行う。なおこの継続処理では、通常時のピースｄ単位の転送のリトライ処理（再送処理）を用いてもよい。
【０１１０】
具体的に、図７の例では、ファイル入出力処理＃２（７０２）に関して、バースト発生時、ｓ１１は、出力ファイル５（次位置Ｘまで）に直接的に書き込み済み分のピースｄ１〜ｄｉ及びその処理を示す。ｓ１２は、ネットワーク３上の障害等により受信側（２０）へ未到達のピースｄｘ及びその処理を示す。ｓ１３は、受信バッファ４２の上限値ｙ以内で正常にスタックされたピースｄｊ〜ｄｋ及びその処理を示す。ｓ１４は、受信バッファ４２の上限値ｙを超えたバースト分のピースｄｌ〜ｄｍ及びその処理を示す。
【０１１１】
ｓ１５は、対処処理（継続処理）の第１の例を示す。ｓ１３のピースｄｊ〜ｄｋを無視した場合であり、ｓ１２のピースｄｘ以降、ｄｍまでを転送処理すればよい。
【０１１２】
送信側（１０）の継続処理の例については以下である。送信側（１０）は、バーストにより中断した処理と同じ送信ＩＤ（ｆ）を使い、対象ファイルＦの存在確認を受信側（２０）に対して実行する。受信側（２０）は、送信側（１０）からの存在確認の対象の送信ＩＤ（ｆ）のファイルＦが存在している場合は、そのうちどこまでピースｄデータを書き込み（確定）済みであるかを示す位置やサイズ等の情報を送信側（１０）へ応答する。例えば次位置Ｘの情報を応答する。これに対し、送信側（１０）は、受信側（２０）で書き込み済みのサイズ分のピースｄの処理をスキップし、当該次位置ＸからのファイルＦのピースｄの読み出し・送信処理を、前述同様に開始する。
【０１１３】
第２の継続処理の例として、バースト時点で受信バッファ４２内に正常に受領（スタック）しているピースｄデータを一旦ファイルとして出力確定させて、受信バッファ４２領域を空けるようにしてもよい。即ち、そのまま受信バッファ４２に保持、もしくはファイル（５とは別）として保存し、当該時点の受信バッファ４２の状態をクリアする。受信用モジュール２０（２４）は、バースト（上限値ｙ超え）分のピースｄデータは無視ないし削除する。
【０１１４】
具体的に、図７の例では、ｓ１６は、対処処理（継続処理）の第２の例を示す。ｓ１３の受信バッファ４２の上限値ｙ以内で正常にスタックされたピースｄｊ〜ｄｋについてはそのまま保持、もしくはｓ１１とは別のファイルとして保存しておく。そして、ｓ１４のピースｄｌ〜ｄｍと、ｓ１２のピースｄｘとを転送処理すればよい。
【０１１５】
［リトライ、再送］
受信側（２０，受信スレッドＵ）が、ピースｄデータの到達／未到達の状態を認識することにより、送信側（１０，送信スレッドＴ）に対して、必要なピースｄの送信のリトライを要求（指示）することができる。この場合、送信側（１０）は受信側（２０）からのリトライ要求に応じたピースｄデータを再送する。これにより、バースト時にも、受信側（２０）で不足分のピースｄデータ（例えば図７の例の次位置Ｘ以降のピースｄ）を転送することができる。
【０１１６】
送信側（１０）は、ピースｄデータ送信で通信エラー等が発生しそれにより受信側（２０）からリトライ要求を受けた場合、当該ピースｄデータを再送する。受信側（２０）は、送信側（１０）から再送されたピースｄデータを受信した場合は、当該時点で既に取得済みであった対応するピースｄの方を無視し、当該再送で新たに取得したピースｄの方を用いる。
【０１１７】
また、受信側（２０）は、送信側（１０）から「終了」通知を受けたとき、受信側（２０）で当該ファイル５への全ピースｄの出力が終了していない場合は、送信側（１０）から未到達のピースｄがあると判断できる。これにより、受信側（２０）及び送信側（１０）は、バースト時と同様に、未到達分のピースｄデータの再送などによる処理を行う。
【０１１８】
［不要インスタンス削除、受信バッファクリア］
また上述した処理と併せて、管理機能６１，６２を用いて、以下のような処理を行うことができる。まず不要インスタンス削除処理として、バースト分のピースｄに関係付けられていた受信スレッドＵ（対応Ｗインスタンス）については、不要インスタンスとして削除する。
【０１１９】
送信側コンピュータ１やネットワーク３に例えば障害が発生した場合、受信側（２０）には、中断されたファイル転送に関連する処理バッファ・データ（受信バッファ４２及びスタック状態のピースｄデータ）と出力処理途中のファイルＦ（５）が残ることになる。不要インスタンス削除処理では、一定時間経過後にも残っている上記データ・情報を削除する処理を行う。
【０１２０】
またバッファクリア処理として、バースト対処における受信バッファ４２のクリアの際、受信バッファ４２にスタック済みの当該ファイル転送に係わる全ピースデータを削除する（第１の継続処理の例）。
【０１２１】
＜効果等＞
以上説明したように、本実施の形態によれば、ネットワーク３（インターネット）上のコンピュータ（１，２）間でのファイルＦの転送（入出力）に係わり、特に対象ファイルＦのサイズが大きい場合にも、マルチスレッド処理によりファイルＦを複数（ピースｄ）に分割して転送する処理を行う構成において、全体的な処理効率を向上することができる。
【０１２２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【産業上の利用可能性】
【０１２３】
本発明は、インターネット上の情報処理システムなどに利用可能である。
【符号の説明】
【０１２４】
１…送信側コンピュータ（クライアント端末）、２…受信側コンピュータ（サーバ）、３…ネットワーク、４…ファイル（入力ファイル）、５…ファイル（出力ファイル）、６…ピースデータ、１０…送信用モジュール（第１のモジュール）、２０…受信用モジュール（第１のモジュール）、１１，２１…設定部、１２，２２…登録部、１３，２３…上限管理部、１４，２４…バースト対処部（継続処理部）、３０…本モジュール（マルチスレッド型ファイル入出力モジュール）、３１，３２…アプリケーション、４１…送信バッファ、４２…受信バッファ、５１，５２…メモリ、６１，６２…管理機能、７１，７２…記憶装置、
ｄ…ピース／ピースデータ、Ｆ…ファイル、Ｔ…送信スレッド、Ｕ…受信スレッド、Ａ…出力位置。
【図１】
0005535115.tif 000002
【図２】
0005535115.tif 000003
【図３】
0005535115.tif 000004
【図４】
0005535115.tif 000005
【図５】
0005535115.tif 000006
【図６】
0005535115.tif 000007
【図７】
0005535115.tif 000008