(57)【特許請求の範囲】
【請求項１】
データ受信装置に、
外部からの一群のデータ受信を、並列処理可能な複数のスレッドのいずれかに割り当てて実行するデータ受信ステップを実行させ、
前記一群のデータ受信は、
元になるデータが複数に分割され、かつ、分割された複数の分割データのうち所定の分割データが圧縮された複数の被分割圧縮データであって、これら複数の被分割圧縮データがそれぞれ識別情報によって識別可能な複数の被分割圧縮データを受信する被分割圧縮データ受信処理と、
受信した前記複数の被分割圧縮データを伸長する伸長処理と、
伸長された前記被分割圧縮データから前記元になるデータを再構成する再構成処理と、
を含み、
前記一群のデータ受信は、前記外部から前記識別情報の一覧を受信する一覧受信処理をさらに含み、
前記データ受信装置に、前記識別情報の一覧に紐づけられるデータ群のうち、前記被分割圧縮データ受信処理で受信した複数の被分割圧縮データとは異なる一又は複数のデータの送信を前記外部に指令する送信指令ステップをさらに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ送信装置、プログラム及びシステムに関する。
【背景技術】
【０００２】
インターネットワークを介してデータを送受信する需要は、ますます高まっており、アプリケーションプログラム、音声データ、動画データ等の大容量のデータの送受信も増え続けている。それに伴い、通信されるデータ量を減らして限られたリソースである通信帯域を有効利用することが、ますます求められている。【０００３】
また、リモートワーク、テレワークの普及等により、インターネットワークを介した音声通信（音声チャット）や映像付き音声通信（ビデオチャット）などの、即時性のある情報伝達であるリアルタイムコミュニケーションを行う需要も、近年さらに高まっている。該コミュニケーションにおいては、送信側と受信側との間に時間差があると、利用者間の意思疎通に不都合が生じる。【０００４】
データの送受信に関する通信されるデータ量を減らし通信遅延を小さくする工夫として、送受信されるデータを圧縮する手法がある。例えば、特許文献１には、ＰＣＩｅ（登録商標）で接続された産業用シングルパスインクジェットプリンタ等で利用可能である、画像データ処理システムが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１８−１５７３２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、伸長処理において、元になるデータを分割して圧縮した複数の圧縮データに対して複数の伸長回路を用いて処理時間の短縮を図ろうとする場合、１つの伸長回路を用いる場合に比べて伸長処理に要する時間が短くなるため、受信が遅れた圧縮データを受信装置が伸長処理中に受信できる機会が減る。結果として、伸長処理が終わってしばらく経ってから受信が遅れた圧縮データが受信され得る。こうした受信では、伸長処理が終わってから受信が遅れた圧縮データの受信までの時間が、通信遅延に加わり、通信遅延を増大させる。したがって、伸長処理を行う時間が長いシステムの場合より、一部の圧縮データの受信の遅れが全体の通信遅延に与える影響が大きくなる。そのため、送り側がデータを分割し、圧縮し、送信することで通信されるデータ量を減らして通信帯域を有効利用するシステムをインターネットワーク上で実現するにあたっては、通信遅延の点においてさらなる改善の余地がある。【０００７】
本発明は、このような事情に鑑みてなされたもので、通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ送信装置等を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明者らは、上記課題を解決するために鋭意検討した結果、送信対象となるデータを複数の分割データに分割し、並列処理可能な複数のスレッドを用いて、所定の分割データの圧縮と、識別情報の紐付けと、データの配送順序を保証しない通信方式を用いた送信とを含む一群のデータ処理を行うことで、上記の目的を達成できることを見出し、本発明を完成させるに至った。【０００９】
具体的に、本発明は、送信対象となるデータを複数の分割データに分割するデータ分割部と、前記複数の分割データのそれぞれにこれら複数の分割データを識別する識別情報を紐付ける識別情報付与部と、前記複数の分割データに対する一群のデータ処理を、並列処理可能な複数のスレッドのいずれかに割り当てて実行するデータ処理部と、を備え、前記一群のデータ処理は、前記複数の分割データのうち、所定の分割データを圧縮し、前記識別情報が紐付けられた複数の送信データを準備する送信データ準備処理と、データの配送順序を保証しない通信方式で前記複数の送信データを外部に送信する送信処理と、を含む、データ送信装置を提供する。【００１０】
本発明によれば、配送順序を保証しない通信方式を用いるため、配送順序を保証する通信方式が有する一部の圧縮データの受信の遅れがその後に送信された圧縮データ全ての受信の遅れを招き通信遅延をさらに増大させる課題を解決できる。本発明によれば、送信データを受信した受け側は、データの受信順序によらず、識別情報を用いて送信対象となるデータを再構成できる。すなわち、識別情報を紐付けることで、並列処理可能な複数のスレッドを用いて送信データ準備処理と送信処理とを行うことにより生じた課題と、データの配送順序を保証しない通信方式を用いたことにより生じた課題とを、一挙に解決できる。したがって、本発明によれば、データの受信順序が保証されないことによる有害な副作用を避けつつ、圧縮により通信されるデータ量を減らして通信帯域を有効利用することと、並列処理がもたらす伸長時間短縮及び配送順序を保証しない通信方式により通信遅延を小さくすることとを同時に達成できる。
【発明の効果】
【００１１】
本発明によれば、通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ送信装置、プログラム及びデータ通信システムを提供できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本実施形態のデータ通信システム１の構成の一例を示すブロック図である。
【図２】図２は、本実施形態のデータ送信装置２を用いたデータ送信の流れの一例を示すメインフローチャートである。
【図３】図３は、本実施形態のデータ送信装置２を用いたデータ分割の一例を示す概念図である。
【図４】図４は、本実施形態の送信対象データ２２１及び識別情報一覧２２２の一例である。
【図５】図５は、本実施形態の並列処理可能なスレッド２１１で実行されるデータ処理の流れの一例を示すフローチャートである。
【図６】図６は、本実施形態のデータ処理部が送信する送信データの一例を示す概念図である。
【図７】図７は、本実施形態のデータ処理の並列処理の一例を示す概念図である。
【図８】図８は、本実施形態のデータ受信装置３を用いたデータ受信の流れの一例を示すメインフローチャートである。
【図９】図９は、本実施形態の受信データ３２１の一例である。
【図１０】図１０は、本実施形態の並列処理可能なスレッド３１１で実行されるデータ受信の流れの一例を示すフローチャートである。
【図１１】図１１は、本実施形態のデータ受信の並列処理の一例を示す概念図である。
【図１２】図１２は、本発明による遅延時間の改善を示す概念図である。
【図１３】図１３は、変形例１のデータ受信装置３を用いたデータ受信の流れの一例を示すメインフローチャートである。
【図１４】図１４は、変形例２のデータ受信装置３を用いたデータ受信の流れの一例を示すメインフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための好適な形態の一例について図を参照しながら説明する。なお、これはあくまでも一例であって、本発明の技術的範囲はこれに限られるものではない。
【００１４】
＜データ通信システム１＞
データ通信システム１（以下、単にシステム１とも称する）は、データ送信装置２（以下、単に送信装置２とも称する）と、データ受信装置３（以下、単に受信装置３とも称する）と、ネットワーク４と、を含んで構成される。
【００１５】
〔データ送信装置２〕
送信装置２は、制御部２１と、記憶部２２と、通信部２３と、を含んで構成される。送信装置２は、データを送信する各種のプログラムを実行可能であることが好ましい。データを送信する各種のプログラムは、例えば、音声チャット、映像チャット又はビデオチャット、動画データの配信サーバ、音声データの配信サーバ、Ｗｅｂサーバ、データ配信サーバ、ＳＡＮ、ＮＡＳ、ファイルサーバ、クラウドストレージ、メールサーバ、等を実現するプログラムが挙げられる。データ送信装置２がデータを送信する各種のプログラムを実行可能であることにより、これら各種のプログラムが送信するデータの送信されるデータ量を減らして通信帯域を有効利用し、通信遅延を小さくできる。
【００１６】
［制御部２１］
制御部２１は、ＣＰＵ、ＲＡＭ、及びＲＯＭ等を備える。制御部２１は、ハードウェアマルチスレッディングを利用可能であることが好ましい。ＣＰＵは、マルチコアＣＰＵであることが好ましい。制御部２１は、ベクトルプロセッサ又はアレイプロセッサを備えていてもよい。ベクトルプロセッサ又はアレイプロセッサは、ＧＰＵであってもよい。市場に広く流通しているＧＰＵであれば、比較的安価にベクトルプロセッサを実現できる。ハードウェアマルチスレッディングを高速に実現しうる、マルチコアＣＰＵ、ベクトルプロセッサ、アレイプロセッサ等を備えていることにより、制御部２１は、並列処理可能なスレッドの実行をより高速に実現できる。並列処理可能なスレッドの実行をより高速に実現することにより、後述する圧縮処理をより短い時間で実行でき、通信遅延を小さくできる。
【００１７】
制御部２１は、所定のプログラムを読み込み、必要に応じて記憶部２２及び／又は通信部２３と協働することで、送信装置２におけるソフトウェア構成の要素である、スレッド群２１１、データ分割部２１２、識別情報付与部２１３、データ処理部２１４等を実現する。
【００１８】
スレッド群２１１は、コンピュータ上での並列処理を実現する構成要素であり、スレッド群２１１の複数のスレッドが割り当てられた一群の処理を並列処理によって同時に実行する。スレッド群２１１を実現するスレッド機構は、特に限定されず、例えば、ユーザスレッド、カーネルスレッド等の既存技術のスレッド機構がある。スレッド群２１１は、ハードウェアマルチスレッディングを利用可能であるスレッド機構を含むことが好ましい。スレッド群２１１は、非同期な並列処理を実行可能であることが好ましい。非同期な並列処理を実行可能であれば、並列処理の同期のために時間を費やすことがなく、通信遅延の増大を防げる。スレッド群２１１は、アドレス空間を、処理単位ごとに仮想化せず、アドレス空間の分離も行わないことが好ましい。仮想化及び／又は分離を行わないことにより、仮想化及び分離に伴う余分な時間がかからず、通信遅延を小さくできる。スレッド群２１１は、割り当てられた一群の処理を並列処理によって実行するため、複数の処理を同時に行える。したがって、処理完了までの時間を並列処理が行われない場合より短縮でき、通信遅延を小さくできる。
【００１９】
［記憶部２２］
記憶部２２は、データやファイルが記憶される装置であって、ハードディスクや半導体メモリ、記録媒体、メモリカード等による、データのストレージ部を有する。記憶部２２は、ネットワークを介してＮＡＳ、ＳＡＮ、クラウドストレージ、ファイルサーバ、分散ファイルシステム等の記憶装置又は記憶システムとの接続を可能にする仕組みを有してもよい。記憶部２２には、マイクロコンピューターで実行される制御プログラム、送信対象データ２２１、識別情報一覧２２２等が記憶されている。
【００２０】
［通信部２３］
通信部２３は、送信装置２を受信装置３その他の機器と通信可能にするためのデバイスを有する。デバイスの種類は特に限定されるものでなく、例えばイーサネット規格に対応したネットワークカード、ＩＥＥＥ８０２．１１に準拠したＷｉ−Ｆｉ対応デバイス、等を有する。大量のデータをやり取りするために、通信部２３は、イーサネット規格に対応したネットワークカードを有することが好ましい。
【００２１】
〔データ受信装置３〕
データ受信装置３は、制御部３１と、記憶部３２と、通信部３３と、を含んで構成される。データ受信装置３は、データを受信する各種のプログラムを実行可能であることが好ましい。データを受信する各種のプログラムは、例えば、音声チャット、映像チャット、ビデオチャット、動画データの配信サーバ、動画データの再生を行うソフトウェア、音声データの配信サーバ、音声データの再生を行うソフトウェア、Ｗｅｂサーバ、Ｗｅｂサーバからデータを取得するソフトウェア、データ配信サーバ、データ配信サーバからデータを取得するソフトウェア、ＳＡＮ、ＳＡＮからデータを取得するソフトウェア、ＮＡＳ、ＮＡＳからデータを取得するソフトウェア、ファイルサーバ、ファイルサーバからデータを取得するソフトウェア、クラウドストレージ、クラウドストレージからデータを取得するソフトウェア、メールサーバ、メールサーバからメールを取得するソフトウェア、等を実現するプログラムが挙げられる。データ受信装置３がデータを受信する各種のプログラムを実行可能であることにより、これら各種のプログラムが受信するデータの受信されるデータ量を減らして通信帯域を有効利用し、通信遅延を小さくできる。
【００２２】
［制御部３１］
制御部３１のハードウェア構成は、制御部２１と同様である。制御部３１は、所定のプログラムを読み込み、必要に応じて記憶部３２及び／又は通信部３３と協働することで、受信装置３におけるソフトウェア構成の要素である、スレッド群３１１、データ受信部３１２、再構成部３１３等を実現する。スレッド群３１１は、スレッド群２１１と同様である。
【００２３】
［記憶部３２］
記憶部３２のハードウェア構成は、記憶部２２と同様である。記憶部３２には、受信データ３２１、識別情報一覧３２２等が記憶されている。
【００２４】
［通信部３３］
通信部３３は、受信装置３を送信装置２その他の機器と通信可能にするためのデバイスを有する。通信部３３のハードウェア構成は、通信部２３と同様である。
【００２５】
〔ネットワーク４〕
ネットワーク４は、送信装置２と、受信装置３とを接続する。ネットワーク４の種類は特に限定されず、パーソナルエリアネットワーク、ローカルエリアネットワーク、イントラネット、エクストラネット、インターネット、Ｗｉ−Ｆｉネットワーク、あるいはこれらを含むネットワークを複数組み合わせたネットワーク等が挙げられる。
【００２６】
〔データ送信のメインフローチャート〕
以下では、図２を参照しながら、送信装置２が行うデータ送信に関する処理の好ましい手順について説明する。
【００２７】
［ステップＳ１：データの分割］
送信対象となる送信対象データに関するデータ送信が指令されると、まず、制御部２１は、記憶部２２と協働してデータ分割部２１２を実行し、送信対象データを分割し、複数の分割データを生成する（ステップＳ１）。制御部２１は、処理をステップＳ２に移す。分割データは、通信方式に応じた１回のデータ送信における送信データ量の上限から所定のデータ量を引いた値以下のデータ量を有することが好ましい。送信対象データの種類は問わない。送信対象データとして、例えば、文書データ、音声データ、画像データ、動画データ、書庫データ、アプリケーションソフトウェア等を実現するプログラム、インストーラを実現するプログラム又はデータ、アプリケーションソフトウェアが利用するデータ、アプリケーションソフトウェアに機能を追加するデータ、アプリケーションソフトウェアの機能を変更するデータ、ＢＩＯＳを書き換えるためのデータ、受け側のコンピュータに特定の動作又は一連の動作を指令する命令及び命令群、等が挙げられる。
【００２８】
図３は、ステップＳ１で行われる送信対象となるデータの分割の一例である。図３は、１回のデータ送信における送信データ量の上限が６５，５３５オクテットでヘッダのデータ量が２０オクテットであるＩＰと、ヘッダのデータ量が８オクテットであるＵＤＰとを組み合わせた通信方式を用い、圧縮時に付与されるヘッダのデータ量が７オクテットである場合のデータの分割の一例を示している。データ分割部２１２は、送信データ量の上限とヘッダのデータ量から、送信対象データを、分割データのデータ量が６５，５００オクテット以下となるように分割する。このように分割することにより、後述するデータ処理が生成する送信データのデータ量がＩＰの定める１回のデータ送信における上限データ量６５，５３５オクテット以下となり、データ量を上限以下にするために追加の分割を行う必要がなく、分割による遅延時間の増大を防げる。
【００２９】
［ステップＳ２：識別情報の紐付け］
図２に戻る。制御部２１は、記憶部２２と協働して識別情報付与部２１３を実行し、ステップＳ１で生成された分割データに識別情報を紐付ける。（ステップＳ２）。制御部２１は、処理をステップＳ３に移す。識別情報付与部２１３は、識別情報の一覧である識別情報一覧を生成し、受信装置３等の外部へ送信する処理をさらに行ってもよい。識別情報は、分割データから元のデータを再構成可能であれば、特に限定されない。識別情報として、例えば、分割データに割り当てられた通し番号、分割データに割り当てられた通し番号と分割数とを組にした情報、分割データの先頭アドレスのデータの元のデータにおけるアドレス番号、分割データの先頭アドレスのデータの元のデータにおけるアドレス番号と元のデータのデータ量との組、等が挙げられる。
【００３０】
図４は、送信対象データ２２１及び識別情報一覧２２２の一例である。送信対象データ２２１は、分割データを識別し、再構成を可能にする識別情報と、分割データに関する送信データが送信済であるか未送信であるかを記憶する送信フラグと、分割データが圧縮済であるか否かを記憶する圧縮フラグと、分割データ及び／又は圧縮データを記憶する分割データ／圧縮データとを含む。ステップＳ２において識別情報付与部２１３は、送信フラグを、未送信を示すよう設定し、圧縮フラグを、未圧縮を示すよう設定することが好ましい。識別情報一覧２２２は、図４に示す例のように、送信対象データ２２１と同じテーブルに記憶されてもよく、別のテーブルに記憶されてもよく、複数のテーブルに記憶されてもよい。
【００３１】
［ステップＳ３：送信指令の受信の有無を判定］
図２に戻る。制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、外部から送信指令を受信したか否かを判定する。（ステップＳ３）。受信していれば、制御部２１は、処理をステップＳ４に移す。受信していなければ、制御部２１は、処理をステップＳ５に移す。外部から送信指令を受信したか否かを判定することにより、通信障害等によって送信済の送信データの一部又は全部が伝送中に失われていても、受信した送信指令に応じて、それらの送信データを送信できる。
【００３２】
［ステップＳ４：該当する送信フラグを未送信に設定］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、送信指令が示す送信対象となる送信データについて、送信対象データ２２１に記憶された送信フラグを、未送信を示すよう設定する（ステップＳ４）。制御部２１は、処理をステップＳ５に移す。送信指令は、送信対象となる送信データに関する識別情報を列挙して送信対象となる送信データを示してもよく、送信対象から除く送信データに関する識別情報を列挙して送信対象となる送信データを示してもよく、送信対象となる送信データの範囲を示す情報によって送信対象となる送信データを示してもよい。また、これらの手法を組み合わせて送信対象となる送信データを示してもよい。
【００３３】
［ステップＳ５：未送信の送信対象データの有無を判定］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、送信フラグが未送信を示す送信データがあるか否かを判定する（ステップＳ５）。未送信を示す送信データがあれば、制御部２１は、処理をステップＳ６に移す。未送信を示す送信データがなければ、制御部２１は、処理をステップＳ８に移す。
【００３４】
［ステップＳ６：データ処理を割当て可能なスレッドの有無を判定］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、データ処理を割当て可能なスレッド２１１があるか否かを判定する（ステップＳ６）。該当するスレッド２１１があれば、制御部２１は、処理をステップＳ７に移す。該当するスレッドがなければ、制御部２１は、処理をステップＳ８に移す。
【００３５】
［ステップＳ７：スレッドにデータ処理を割り当てて実行］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、データ処理を割当て可能なスレッド群２１１の有するスレッドのいずれかに分割データに対する一群のデータ処理を割り当てて実行させる（ステップＳ７）。制御部２１は、処理をステップＳ８に移す。ステップＳ７の詳細については、後に図５を参照しながら説明する。
【００３６】
［ステップＳ８：受信完了情報の受信の有無を判定］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、受信完了情報を受信したか否かを判定する（ステップＳ８）。受信したならば、制御部２１は、処理を終了し、他の送信対象データに関するデータ送信を待機して、ステップＳ１〜Ｓ８を繰り返す。受信していないならば、制御部２１は、処理をステップＳ３に移す。受信完了情報を受信したか否かを判定するため、受け側が全ての送信データを受信して受信完了情報を送信するまで、送信データの送信を続けられる。したがって、受け側が全ての送信データを受信する前に送信を終了し、受け側が送信データの不足から送信対象データを利用できなくなることがない。
【００３７】
〔データ処理のフローチャート〕
図５は、本実施形態における並列処理可能なスレッドで実行される一群のデータ処理の手順を示すフローチャートの一例である。
【００３８】
［ステップＳ１１：圧縮を要する所定データか否かを判定］
スレッド群２１１の有するスレッドのいずれかに一群のデータ処理の実行が割り当てられると、制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、分割データが圧縮を要する所定データであるか否かを判定する（ステップＳ１１）。所定データであるならば、制御部２１は、処理をステップＳ１２に移す。所定データでないならば、制御部２１は、処理をステップＳ１３に移す。所定データであるか否かを判定するため、圧縮を要する所定データのみを圧縮でき、通信遅延を小さくできる。所定データであるか否かの判定は、特に限定されない。例えば、圧縮フラグが圧縮済である場合に所定データではないと判定する判定、分割データのデータ量が所定のデータ量以下である場合に所定データではないと判定する判定、これらの判定を組み合わせた判定、等が挙げられる。
【００３９】
［ステップＳ１２：所定データの圧縮］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、所定データを圧縮し、対応する圧縮フラグを圧縮済に変更する（ステップＳ１２）。制御部２１は、処理をステップＳ１３に移す。
【００４０】
データを圧縮する手法は、特に限定されない。データを圧縮する手法は、例えば、エントロピー符号化に基づく手法、辞書式符号化に基づく手法、エントロピー符号化と辞書式符号化をともに含む手法、のいずれか１つ又は複数を含む。データを圧縮する手法は、ＢＷＴ、ＣＴＷ、差分符号化、ＤＭＣ、差分パルス符号変調、ＭＴＦ、ＰＡＱ、ＰＰＭ、ＲＬＥ等を含んでもよい。データを圧縮する手法は、伸長速度に優れた圧縮方式であるＬＺＯ（Ｌｅｍｐｅｌ−Ｚｉｖ−Ｏｂｅｒｈｕｍｅｒ）とほぼ同等の圧縮率を有しつつ、圧縮速度がＬＺＯよりも優れており、制御部２１の処理能力や通信状況等に応じてより通信遅延を小さくするよう圧縮速度と圧縮率とのトレードオフ関係を変更可能であることから、ｌｚ４ｆａｓｔアルゴリズムを用いた方式を含むことが好ましい。
【００４１】
データを圧縮する手法は、圧縮された所定データに圧縮に関する情報を記憶するヘッダを付与してもよい。圧縮に関するヘッダは、例えば、圧縮手法、圧縮前のデータ量、圧縮率、チェックサム、等を含む。圧縮に関する情報を記憶するヘッダを付与することにより、受信装置３等の受け側は圧縮に関する情報を用いた伸長処理等を行える。
【００４２】
［ステップＳ１３：識別情報が紐付けられた送信データを生成］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、ステップＳ１２で圧縮された所定データ又は所定データでない分割データと識別情報とを紐付けた、送信データを生成する（ステップＳ１３）。制御部２１は、処理をステップＳ１４に移す。ステップＳ１２で圧縮された所定データのデータ量が圧縮される前の分割データのデータ量より大きかった場合、圧縮される前の分割データと識別情報とを紐付けて送信データを生成することが好ましい。送信データは、圧縮手法に関する情報を含んでいてもよい。
【００４３】
［ステップＳ１４：送信処理可能か否かを判定］
制御部２１は、記憶部２２と協働してデータ処理部２１４を実行し、送信データの送信処理が可能か否かを判定する（ステップＳ１４）。可能ならば、制御部２１は、処理をステップＳ１５に移す。可能でないならば、制御部２１は、ステップＳ１４を繰り返す。制御部２１は、所定時間待機してからステップＳ１４を繰り返してもよい。所定時間待機することにより、送信処理が可能か否かの判定による制御部２１及び通信部２３への負担を減らし、同じ制御部２１及び通信部２３を利用する他のスレッドの実行速度及び処理に要する時間を改善して全体の実行時間の増大を防げる。
【００４４】
［ステップＳ１５：配送順序を保証しない通信方式で送信データを送信］
制御部２１は、記憶部２２及び通信部２３と協働してデータ処理部２１４を実行し、配送順序を保証しない通信方式で受信装置３等の外部に送信データを送信する（ステップＳ１５）。制御部２１は、処理をステップＳ１６に移す。配送順序を保証しない通信方式は、特に限定されない。配送順序を保証しない通信方式として、例えば、トランスポート層に相当する通信プロトコルのＵＤＰ、ＳＣＴＰ、ＤＣＣＰのいずれか１つ又は複数を含む通信方式が挙げられる。配送順序を保証しない通信方式は、インターネット層に相当する通信プロトコルを含んでもよい。配送順序を保証しない通信方式は、ＩＰを含むことが好ましい。ＩＰを含むことにより、ＩＰを用いる既存のインターネットワークを利用した通信を行える。
【００４５】
通信方式がＵＤＰを含むことにより、ＴＣＰを含む通信方式と異なり、事前に転送チャネルやデータ経路に関する特別な設定をする必要がない。したがって、通信遅延をさらに小さくできる。ＵＤＰは簡便な通信プロトコルであるため、特別な機器やネットワークを用意することなく、既存のインターネットワーク及びそのための既存の機器を用いて配送順序を保証しない通信方式による送信処理を実現できる。ＵＤＰの代わりに利用できるＴＣＰ、ＭＰＴＣＰ、ＤＣＣＰと異なり、ＵＤＰは、フロー制御を行わない。フロー制御が行われると、通信遅延が増大しうる。通信方式がＵＤＰを含むことにより、これらの通信方式を用いる場合より、通信遅延を減らしうる。ＵＤＰのヘッダのデータ量は８オクテットであり、標準データ量が２０オクテットであるＴＣＰのヘッダや、標準データ量が５２オクテットであるＭＰＴＣＰのヘッダや、標準データ量が１６オクテットであるＤＣＣＰのヘッダよりデータ量が小さい。通信方式がＵＤＰを含むことにより、付加されるヘッダのデータ量が小さくなるため、通信されるデータ量を減らして通信帯域を有効利用できる。
【００４６】
通信方式が、ＳＣＴＰを含むことにより、ネットワーク障害が生じた場合であっても、その障害からの復元力によって、比較的短い時間で送受信を再開できる。すなわち、ネットワーク障害発生時の通信遅延を小さく抑えられる。また、ネットワーク障害によってデータが失われれば、失われたデータが再び送信されて受信されるまでデータを利用できず、通信遅延が増大するが、ＳＣＴＰは、データの到着をより確実にする信頼性を有するため、このような通信遅延の増大を抑えられる。ＳＣＴＰのヘッダのデータ量は１２オクテットであり、ＴＣＰのヘッダや、ＭＰＴＣＰのヘッダや、ＤＣＣＰのヘッダよりデータ量が小さい。したがって、ＴＣＰ、ＭＰＴＣＰ、ＤＣＣＰを用いる場合より、通信されるデータ量を減らして通信帯域を有効利用できる。
【００４７】
図６は、図３に示した分割データに関する送信データの一例である。分割データ１〜３はそれぞれ圧縮されている。分割データ４は、所定データでなかったために圧縮されず、非圧縮データのままである。これらのデータのそれぞれに、３５オクテットのヘッダが付与される。これらを合計した送信されるデータ量は、９３６４０オクテットとなり、送信対象データの２０００００オクテットより小さい。したがって、通信されるデータ量を減らして通信帯域を有効利用できる。
【００４８】
［ステップＳ１６：対応する送信フラグを送信済に変更］
図５に戻る。制御部２１は、記憶部２２及び通信部２３と協働してデータ処理部２１４を実行し、ステップＳ１５で送信した送信データに対応する送信フラグを、送信済を示すよう変更する（ステップＳ１６）。制御部２１は、処理を終了して次の一群のデータ処理の実行がスレッド２１１に割り当てられるまで待機する。
【００４９】
図７は、並列処理可能なスレッドに割り当てたステップＳ１１〜ステップＳ１６の一群のデータ処理の並列処理を示す概念図である。この例では、スレッド群２１１は、２つのスレッド（スレッド２１１ａ及びスレッド２１１ｂ）を有する。図７が示すように、多くの送信処理は、送信処理を行っていない他のスレッドの圧縮処理と同時に実行されるため、それらが送信完了までの処理時間を増大させることがない。したがって、処理開始から送信完了までの時間が短くなり、通信遅延を小さくできる。図７ではスレッド群２１１が２つのスレッドを有する場合を示したが、スレッド数がさらに多ければ、送信処理中に送信処理を行っていない他のスレッドで実行される圧縮処理の数が増え、処理開始から送信完了までの時間がさらに短くなることが理解されよう。
【００５０】
送信装置２は、ステップＳ１からステップＳ１６に係る上述の手順で送信対象データを分割及び圧縮して送信するため、通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ送信装置を提供できる。
【００５１】
〔データ受信のメインフローチャート〕
以下では、図８を参照しながら、受信装置３が行うデータ受信に関する処理の好ましい手順について説明する。
【００５２】
［ステップＳ１０１：スレッドにデータ処理を割り当てて実行］
制御部３１は、記憶部３２と協働してデータ受信部３１２を実行し、一群のデータ受信を割当て可能なスレッド３１１に一群のデータ受信を割り当てて実行させる（ステップＳ１０１）。制御部３１は、処理をステップＳ１０２に移す。ステップＳ１０１の詳細については、後に図１０を参照しながら説明する。
【００５３】
［ステップＳ１０２：識別情報一覧を受信したか判定］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、識別情報一覧を受信したか否かを判定する（ステップＳ１０２）。受信したら、制御部３１は、記憶部３２と協働して識別情報一覧を識別情報一覧３２１に記憶し、処理をステップＳ１０３に移す。受信していないならば、制御部３１は、ステップＳ１０２の処理を繰り返す。
【００５４】
［ステップＳ１０３：所定時間が経過するまで待機］
制御部３１は、記憶部３２と協働してデータ受信部３１２を実行し、所定時間が経過するまで処理を待機する（ステップＳ１０３）。制御部３１は、処理をステップＳ１０４に移す。所定時間待機することにより、後述する送信指令を立て続けに送信することによる通信されるデータ量の増大を防げる。制御部３１は、所定時間が経過するまで処理を待機する代わりに、スレッド群３１１のスレッドを同期するスレッド同期オブジェクトがスレッドの同期に関する所定の動作を実行するまで処理を待機してもよい。スレッドの同期に関する所定の動作を実行するまで処理を待機することにより、スレッド群３１１のスレッドの同期処理がより効果的に行われ、通信遅延を小さくできる。また、受信データ３２１、識別情報３２２等へのアクセスを制御する排他制御コンテナがアクセスの排他制御に関する所定の動作を実行するまで処理を待機してもよい。アクセスの排他制御に関する所定の動作を実行するまで処理を待機することにより、受信データ３２１、識別情報３２２等へのアクセスがより効果的に行われ、通信遅延を小さくできる。スレッド同期オブジェクトは、Ｍｕｔｅｘ、Ｓｅｍａｐｈｏｒｅ、Ｅｖｅｎｔのいずれか、又は、これらのいずれかを継承したオブジェクトを含むことが好ましい。排他制御コンテナは、Ｑｕｅｕｅ、Ｓｔａｃｋ、Ｌｉｓｔ、Ｖｅｃｔｏｒのいずれか又はこれらのいずれかを継承したコンテナを含むことが好ましい。
【００５５】
［ステップＳ１０４：識別情報一覧と受信データとの間に差異があるか判定］
制御部３１は、記憶部３２と協働してデータ受信部３１２を実行し、識別情報一覧３２１と後述する受信データ３２２との間に差異があるか否かを判定する（ステップＳ１０４）。差異があれば、制御部３１は、処理をステップＳ１０５に移す。差異がなければ、制御部３１は、処理をステップＳ１０６に移す。
【００５６】
図９は、受信データ３２２の一例である。受信データ３２２は、被分割圧縮データを識別し、再構成を可能にする識別情報と、被分割圧縮データに対する伸長処理が必要であるか否かを示す処理フラグと、受信した被分割圧縮データを記憶する処理前データと、被分割圧縮データに伸長処理を行う等して得られた被分割データを記憶する処理後データとを含む。識別情報は、被分割データから元のデータを再構成可能とする情報であれば、特に限定されない。
【００５７】
［ステップＳ１０５：識別情報一覧のうち、受信データと異なるデータの送信を指令］
図８に戻る。制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、識別情報一覧を送信した外部に、識別情報一覧のうち受信データ３２１に記憶された識別情報と異なる被分割圧縮データの送信を指令する（ステップＳ１０５）。制御部３１は、処理をステップＳ１０３に移す。識別情報一覧のうち受信データ３２１に記憶された識別情報と異なる被分割圧縮データの送信を指令することにより、通信障害等によって被分割圧縮データの一部又は全部がネットワーク４を介した伝送中に失われていても、それら失われた被分割圧縮データの送信を指令して、受信できる。
【００５８】
［ステップＳ１０６：識別情報を用いて元になるデータを再構成］
制御部３１は、記憶部３２と協働して再構成部３１３を実行し、識別情報を用いて元になるデータを再構成する（ステップＳ１０６）。制御部３１は、処理をステップＳ１０７に移す。再構成部３１３は、処理フラグが要処理を示していない被分割データに関する再構成から順に進めていくことが好ましい。処理フラグが要処理を示していない被分割データに関する再構成から順に進めることで、再構成と処理フラグが要処理を示す被分割データに関する伸長処理とを同時に実行し、通信遅延を小さくできる。再構成の手法は、識別情報を用いるものであれば、特に限定されない。再構成の手法として、例えば、通し番号の順に被分割データを連結する再構成手法、受信して伸長したデータを再構成後のファイルのアドレス番号の位置に書き込む再構成手法、等が挙げられる。受信して伸長したデータを再構成後のファイルのアドレス番号の位置に書き込む再構成手法は、予め元のデータのデータ量の記憶領域を確保することが好ましい。
【００５９】
［ステップＳ１０７：受信完了情報を送信］
制御部３１は、記憶部３２及び通信部３３と協働して再構成部３１３を実行し、識別情報一覧を送信した外部に、受信完了を通知する受信完了情報を送信する（ステップＳ１０７）。制御部３１は、処理をステップＳ１０１に移し、ステップＳ１０１からステップＳ１０７を繰り返す。
【００６０】
〔データ処理のフローチャート〕
図１０は、本実施形態における並列処理可能なスレッドで実行される一群のデータ受信の手順を示すフローチャートの一例である。
【００６１】
［ステップＳ１１１：被分割圧縮データ受信の有無を判定］
スレッド３１１に一群のデータ受信の実行が割り当てられると、制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、被分割圧縮データを識別可能な識別情報と紐付けられた被分割圧縮データを受信したか否かを判定する（ステップＳ１１１）。受信したならば、制御部３１は、処理をステップＳ１１２に移す。受信していないならば、制御部３１は、ステップＳ１１１を繰り返す。受信していないならば、制御部３１は、所定時間待機してから、ステップＳ１１１を繰り返してもよい。所定時間待機することにより、制御部３１及び通信部３３への負担を減らし、他のスレッドの実行速度及び処理に要する時間を改善して、通信遅延の増大を防げる。
【００６２】
［ステップＳ１１２：受信データ３２１に被分割圧縮データを記憶］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信データ３２１に識別情報と被分割圧縮データとを紐付けて記憶する（ステップＳ１１２）。制御部３１は、処理をステップＳ１１３に移す。図９に示した受信データ３２１の例では、受信した被分割圧縮データを、処理前データに記憶し、紐付けられた識別情報を。識別情報に記憶している。被分割圧縮データを記憶する順番は、特に限定されない。被分割圧縮データを記憶する順番として、例えば、図９に示す被分割圧縮データを受信した順番、識別情報が含む通し番号に沿った順番、等が挙げられる。
【００６３】
［ステップＳ１１３：伸長処理が必要か否かを判定］
図１０に戻る。制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信した被分割圧縮データに関する伸長処理が必要か否かを判定する（ステップＳ１１３）。伸長処理が必要であれば、制御部３１は、処理をステップＳ１１４に移す。伸長処理が必要でなければ、制御部３１は、処理をステップＳ１１６に移す。
【００６４】
［ステップＳ１１４：処理フラグを要処理に変更］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信データ３２１が記憶する受信した被分割圧縮データに関する処理フラグを、要処理を示すよう変更する（ステップＳ１１４）。制御部３１は、処理をステップＳ１１５に移す。
【００６５】
［ステップＳ１１５：伸長処理を実行］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信した被分割圧縮データに関する伸長処理を実行する（ステップＳ１１５）。制御部３１は、処理をステップＳ１１６に移す。
【００６６】
データを伸長する手法は、特に限定されない。データを伸長する手法は、送信装置２等の送り側が用いる圧縮手法で圧縮されたデータを伸長する手法を含むことが好ましい。データを伸長する手法は、圧縮手法の判別を含んでいてもよい。圧縮手法の判別を含むことにより、送信装置２等の送り側が用いた圧縮手法が予めわかっていない場合でもデータを伸長できる。データを伸長する手法は、伸長速度に優れた圧縮方式であるＬＺＯとほぼ同等の圧縮率を有しつつ、伸長速度がＬＺＯよりも優れていることから、ｌｚ４ｆａｓｔアルゴリズムを用いた方式を含むことが好ましい。
【００６７】
制御部３１は、伸長処理に失敗した場合、該当する被分割圧縮データを受信データ３２１から取り除くエラー処理を行ってもよい。該当する被分割圧縮データを受信データ３２１から取り除くことにより、Ｓ１０４及びＳ１０５において該当する被分割圧縮データの送信が指令される。これにより、通信エラー等によって被分割圧縮データが破損して伸長処理に失敗した場合でも、伸長処理に成功するまで該当する被分割圧縮データの送信をいち早く指令できる。したがって、通信エラー等によって被分割圧縮データが破損して伸長処理に失敗した場合でも、元になるデータの再構成がより小さい通信遅延で実現できる。
【００６８】
［ステップＳ１１６：処理フラグを処理不要に変更］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信データ３２１が記憶する受信した被分割圧縮データに関する処理フラグを、処理不要を示すよう変更する（ステップＳ１１６）。制御部３１は、処理をステップＳ１１１に移し、ステップＳ１１１からステップＳ１１６を繰り返す。
【００６９】
図１１は、並列処理可能なスレッドに割り当てたステップＳ１１１〜ステップＳ１６の一群のデータ受信の並列処理を示す概念図である。この例では、スレッド３１１は、２つのスレッド（スレッド３１１ａ及びスレッド３１１ｂ）を有する。図１１が示すように、多くの受信処理は、受信処理を行っていない他のスレッドの伸長処理と同時に実行されるため、それらが受信処理及び伸長処理完了までの処理時間を増大させることがない。したがって、処理開始から受信処理及び伸長処理完了までの時間が短くなり、通信遅延を小さくできる。図１１ではスレッド３１１が２つのスレッドを有する場合を示したが、スレッド数がさらに多ければ、受信処理中に受信処理を行っていない他のスレッドで実行される伸長処理の数が増え、処理開始から受信処理及び伸長処理完了までの時間がさらに短くなることが理解されよう。
【００７０】
受信装置２は、ステップＳ１０１からステップＳ１１６に係る上述の手順で被分割圧縮データを受信及び伸長して再構成するため、通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ受信装置を提供できる。
【００７１】
＜データ通信システムの使用例＞
続いて、本実施形態におけるシステム１の使用例を説明する。
【００７２】
本実施形態によると、送信装置２は、ネットワーク４を介し、受信装置３と接続可能に構成されている。
【００７３】
〔データの送信〕
利用者又は送信装置２で実行される他のプログラムは、送信装置２に送信対象データの送信を指令する。送信装置２は、データ分割部２１２を実行し、送信対象データを分割して分割データを生成する。送信装置２は、識別情報付与部２１３を実行し、分割データに識別情報を付与し、識別情報一覧２２２を受信装置３に送信する。送信装置２は、データ処理部２１４を実行し、並列処理可能な複数のスレッド２１１のいずれか（例えば、スレッド２１１ａ）に複数の分割データに関する一群のデータ処理を割り当てて実行させる。データ処理を割り当てられたスレッドは、所定の分割データを圧縮し、識別情報が紐付けられた送信データを準備する。そして、データ処理を割り当てられたスレッドは、データの配送順序を保証しない通信方式で送信データを受信装置３に送信する。
【００７４】
〔データの配送〕
送信データは、ネットワーク４を介して、受信装置３に配送される。
【００７５】
〔データの受信〕
受信装置３は、データ受信部３２１を実行し、並列処理可能な複数のスレッド３１１のいずれかにデータ受信に関する一群の処理を割り当てて実行させる。スレッド３１１は、送信装置２が送信した送信データを識別情報が紐付けられた被分割圧縮データとして受信する。さらに、スレッド３１１は、伸長処理を要する被分割圧縮データの伸長処理を行い、伸長された被分割圧縮データに関する被分割データを生成する。また、伸長処理を要しない被分割圧縮データから、被分割データを生成する。全ての被分割圧縮データを受信すると、受信装置３は、送信装置２に受信完了情報を送信する。そして、再構成部３１３を実行し、複数の被分割データ及び識別情報を用いて送信対象データを再構成する。再構成された送信対象データは、受信装置３で実行される他のプログラムによって利用されてもよい。
【００７６】
〔データの送信の終了〕
送信装置２は、受信完了情報を受信し、データの送信を終了する。
【００７７】
図１２は、本発明による遅延時間の改善の概要を示す概念図である。分割を行わないデータ通信では、圧縮処理と、送信処理と、データの伝送と、受信処理と、伸長処理と、を逐次実行するため、送り側の送信対象データに関する通信開始から、受け側で送信対象データが利用できるようになる通信完了までの時間は、これらの処理に要する時間とデータの伝送に要する時間とを合計した時間となる。本発明のデータ通信では、並列処理可能な複数のスレッドを用いて圧縮処理と送信処理とを同時に行うため、送信処理に要する時間が通信遅延に与える影響を、実質的に無視できる。また、本発明のデータ通信では、並列処理可能な複数のスレッドを用いて受信処理と伸長処理とを同時に行うため、受信処理に要する時間が通信遅延に与える影響を、実質的に無視できる。送信処理と受信処理が通信遅延に与える影響を実質的に無視できるため、再構成に要する時間を加えても、通信開始から通信完了までの時間を短縮できる。
【００７８】
よって、本実施形態に記載のデータ通信システム１によれば、通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ通信システムを提供できる。
【００７９】
＜変形例＞
以下、本実施形態に記載の発明における種々の変形例を例示する。
【００８０】
〔変形例１〕  （被分割圧縮データの分割数を受信するデータ受信）
実施例の受信装置３は、識別情報一覧を受信し、ステップＳ１０４で識別情報一覧と受信データとの間に差異があるか判定し、ステップＳ１０５で識別情報一覧のうち、受信データと異なるデータの送信を指令したが、これに限るものでない。本変形例では、受信装置３は、識別情報一覧を受信せず、被分割圧縮データの分割数を受信し、受信した被分割圧縮データの数がこの分割数未満であるときに、受信した被分割圧縮データと異なる被分割圧縮データの送信を指令する場合について説明する。以下、図１３を参照しながら、被分割圧縮データの分割数を受信するデータ受信の手順について説明する。
【００８１】
〔被分割圧縮データの分割数を受信するデータ受信に関するメインフローチャート〕
図１３は、本変形例における被分割圧縮データの分割数を受信するデータ受信を行う手順を示すフローチャートの一例である。本変形例の被分割圧縮データのうち少なくとも１つは、被分割圧縮データの分割数を示す情報を含む。本変形例の記憶部３２は、被分割圧縮データの分割数を記憶する最終データ分割数変数を記憶する。
【００８２】
［ステップＳ１０１：スレッドにデータ処理を割り当てて実行］
［ステップＳ１０３：所定時間が経過するまで待機］
ステップＳ１０１は、分割数変数を、未受信を示すよう設定し、制御部３１が処理をステップＳ１０３に移すことを除き、基本実施例のステップＳ１０１と同じである。ステップＳ１０３は、制御部３１が処理をステップＳ２０１に移すことを除き、基本実施例のステップＳ１０３と同じである。
【００８３】
［ステップＳ２０１：分割数の受信の有無を判定］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、分割数変数を参照して、分割数が未受信であるか否かを判定する（ステップＳ２０１）。未受信を示していれば、制御部３１は、処理をステップＳ２０２に移す。未受信を示していなければ、制御部３１は、処理をステップＳ２０３に移す。
【００８４】
［ステップＳ２０２：分割数の送信を指令］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、送り側に分割数の送信を指令する（ステップＳ２０２）。制御部３１は、処理をステップＳ１０３に移す。送り側に分割数の送信を指令することにより、通信障害等によって分割数がネットワーク４を介した伝送中に失われていても、分割数を受信できる。
【００８５】
［ステップＳ２０３：未受信のデータの有無を判定］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、分割数変数と受信データ３２１が記憶する被分割圧縮データの数とが一致するか否かを比較して、未受信の被分割圧縮データがあるか否かを判定する（ステップＳ２０３）。未受信の被分割圧縮データがあれば、制御部３１は、処理をステップＳ２０４に移す。未受信の被分割圧縮データがなければ、制御部３１は、処理をステップＳ１０６に移す。
【００８６】
［ステップＳ２０４：受信データと異なるデータの送信を指令］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、送信装置２等の送り側に、受信データと異なるデータの送信を指令する（ステップＳ２０４）。制御部３１は、処理をステップＳ１０６に移す。受信データと異なるデータの送信の指令は、受信データ３２１が記憶する識別情報の一覧を含むことが好ましい。
【００８７】
［ステップＳ１０６：識別情報を用いて元になるデータを再構成］
［ステップＳ１０７：受信完了情報を送信］
ステップＳ１０６及びステップＳ１０７は、基本実施例と同じである。
【００８８】
並列処理可能なスレッドで実行される一群のデータ受信の手順は、ステップＳ１１１で分割数を示す情報を含む被分割圧縮データを受信した場合に分割数変数を受信した情報が示す分割数を示すよう変更することを除き、基本実施例と同じである。
【００８９】
本変形例では、受信装置３は、識別情報一覧を受信せず、被分割圧縮データの分割数を受信し、受信した被分割圧縮データの数がこの分割数未満であるときに、受信した被分割圧縮データと異なる被分割圧縮データの送信を指令するため、識別情報一覧を受信せずにデータの再構成を行える。したがって、送信装置２等の送り側は、識別情報一覧を送信する必要がない。これにより、通信されるデータ量を小さくし、通信帯域をさらに有効利用できる。
【００９０】
〔変形例２〕  （全ての被分割圧縮データを受信したか否かを判別可能とする情報を受信するデータ受信）
本変形例では、受信装置３は、全ての被分割圧縮データを受信したか否かを判別可能とする情報を受信し、全ての被分割圧縮データを受信していないときに、受信した被分割圧縮データと異なる被分割圧縮データの送信を指令する場合を説明する。全ての被分割圧縮データを受信したか否かを判別可能とする情報は、特に限定されない。全ての被分割圧縮データを受信したか否かを判別可能とする情報は、例えば、被分割圧縮データのハッシュ値、被分割圧縮データのチェックサム、元になるデータのデータ量、等が挙げられる。
【００９１】
〔全ての被分割圧縮データを受信したか否かを判別可能とする情報を受信するデータ受信に関するメインフローチャート〕
図１４は、全ての被分割圧縮データを受信したか否かを判別可能とする情報を受信するデータ受信を行う手順を示すフローチャートの一例である。本変形例の被分割圧縮データのうち少なくとも１つは、全ての被分割圧縮データを受信したか否かを判別可能とする情報を含む。本変形例の記憶部３２は、全ての被分割圧縮データを受信したか否かを判別可能とする情報を記憶する受信完了判別情報を記憶する。
【００９２】
［ステップＳ１０１：スレッドにデータ処理を割り当てて実行］
［ステップＳ１０３：所定時間が経過するまで待機］
ステップＳ１０１は、受信完了判別情報を、未受信を示すよう設定し、制御部３１が処理をステップＳ１０３に移すことを除き、基本実施例のステップＳ１０１と同じである。ステップＳ１０３は、制御部３１が処理をステップＳ３０１に移すことを除き、基本実施例のステップＳ１０３と同じである。
【００９３】
［ステップＳ３０１：全ての被分割圧縮データを受信したか否かを判別可能とする情報の受信の有無を判定］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信完了判別情報を参照して、全ての被分割圧縮データを受信したか否かを判別可能とする情報が未受信であるか否かを判定する（ステップＳ３０１）。分割数変数が未受信を示していれば、制御部３１は、処理をステップＳ３０２に移す。分割数変数が未受信を示していなければ、制御部３１は、処理をステップＳ３０３に移す。
【００９４】
［ステップＳ３０２：全ての被分割圧縮データを受信したか否かを判別可能とする情報の送信を指令］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、送り側に全ての被分割圧縮データを受信したか否かを判別可能とする情報の送信を指令する（ステップＳ３０２）。制御部３１は、処理をステップＳ１０３に移す。送り側に全ての被分割圧縮データを受信したか否かを判別可能とする情報の送信を指令することにより、通信障害等によって全ての被分割圧縮データを受信したか否かを判別可能とする情報がネットワーク４を介した伝送中に失われていても、全ての被分割圧縮データを受信したか否かを判別可能とする情報を受信できる。
【００９５】
［ステップＳ３０３：未受信のデータの有無を判定］
制御部３１は、記憶部３２及び通信部３３と協働してデータ受信部３１２を実行し、受信完了判別情報と受信データ３２１とを比較して、未受信の被分割圧縮データがあるか否かを判定する（ステップＳ２０３）。未受信の被分割圧縮データがあれば、制御部３１は、処理をステップＳ２０４に移す。未受信の被分割圧縮データがなければ、制御部３１は、処理をステップＳ１０６に移す。受信完了判別情報と受信データ３２１との比較を行う方法は、特に限定されない。
【００９６】
［ステップＳ２０４：受信データと異なるデータの送信を指令］
［ステップＳ１０６：識別情報を用いて元になるデータを再構成］
［ステップＳ１０７：受信完了情報を送信］
ステップＳ２０４は変形例１と同じである。ステップＳ１０６及びステップＳ１０７は、基本実施例と同じである。
【００９７】
本変形例では、受信装置３は、識別情報一覧を受信せず、全ての被分割圧縮データを受信したか否かを判別可能とする情報を受信し、全ての被分割圧縮データを受信していないときに、受信した被分割圧縮データと異なる被分割圧縮データの送信を指令するため、識別情報一覧を受信せずにデータの再構成を行える。したがって、送信装置２等の送り側は、識別情報一覧を送信する必要がない。これにより、通信されるデータ量を小さくし、通信帯域をさらに有効利用できる。
【００９８】
〔変形例３〕  （並列処理可能な複数のスレッドで再構成処理を実行するデータ受信）
本変形例では、受信装置３は、並列処理可能な複数のスレッドで再構成処理を実行する場合について説明する。本変形例の識別情報一覧３２２は、元のデータのデータ量と、被分割圧縮データに関する被分割データのデータ量とを含むことが好ましい。
【００９９】
〔並列処理可能な複数のスレッドで再構成処理を実行するデータ受信に関するメインフローチャート〕
【０１００】
［ステップＳ１０１：スレッドにデータ処理を割り当てて実行］
［ステップＳ１０２：識別情報一覧を受信したか判定］
［ステップＳ１０３：所定時間が経過するまで待機］
［ステップＳ１０４：識別情報一覧と受信データとの間に差異があるか判定］
［ステップＳ１０５：識別情報一覧のうち、受信データと異なるデータの送信を指令］
［ステップＳ１０７：受信完了情報を送信］
ステップＳ１０１は、一群のデータ受信が再構成処理をさらに含むことを除き、基本実施例と同じである。ステップＳ１０２、ステップＳ１０３、ステップＳ１０５、ステップＳ１０７は、基本実施例と同じである。ステップＳ１０４は、識別情報一覧３２１と後述する受信データ３２２との間に差異がなければ、処理をステップＳ１０７に移すことを除き、基本実施例と同じである。
【０１０１】
〔データ処理のフローチャート〕
本変形例における並列処理可能なスレッドで実行される一群のデータ受信の手順は、ステップＳ１１６に続けて以下の処理を行う。
【０１０２】
［ステップＳ１１７：識別情報を用いて元になるデータを再構成］
制御部３１は、記憶部３２と協働して再構成部３１３を実行し、識別情報を用いて元になるデータを再構成する（ステップＳ１１７）。制御部３１は、処理をステップＳ１１１に移し、ステップＳ１１１からステップＳ１１７を繰り返す。再構成の手法は、識別情報を用いるものであれば、特に限定されない。再構成の手法として、例えば、通し番号の順に被分割データを連結する再構成手法、受信して伸長したデータを再構成後のファイルのアドレス番号の位置に書き込む再構成手法、等が挙げられる。再構成の手法は、受信して伸長したデータを再構成後のファイルのアドレス番号の位置に書き込む再構成手法を含むことが好ましい。受信して伸長したデータを再構成後のファイルのアドレス番号の位置に書き込む再構成手法であれば、複数の再構成処理を同時に実行できる。したがって、通信遅延をより小さくできる。
【０１０３】
本変形例の受信装置３は、並列処理可能な複数のスレッドで再構成処理を実行するため、受信処理中又は図１１に示したようなデータの受信を待機中の時間に再構成処理が行われうる。したがって、受信処理中の時間の無駄や、データの受信を待機中の時間の無駄をさらに減らしうる。これにより、通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ受信装置を提供できる。
【０１０４】
以上、本発明の実施形態及び各種変形例について説明したが、本発明は上述したこれらの実施形態及び各種変形例に限るものではない。また、本発明の実施形態及び各種変形例に記載された効果は、本発明から生じる最も好適な効果を列挙したものに過ぎず、本発明による効果は、本発明の実施形態及び各種変形例に記載されたものに限定されるものではない。
【０１０５】
また、上述した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。
【符号の説明】
【０１０６】
１        データ通信システム
２        データ送信装置
２１      制御部
２１１    スレッド群
２１１ａ  スレッド
２１１ｂ  スレッド
２１２    データ分割部
２１３    識別情報付与部
２１４    データ処理部
２２      記憶部
２２１    送信対象データ
２２２    識別情報一覧
２３      通信部
３        データ受信装置
３１      制御部
３１１    スレッド群
３１１ａ  スレッド
３１１ｂ  スレッド
３１２    データ受信部
３１３    再構成部
３２      記憶部
３２１    受信データ
３２２    識別情報一覧
３３      通信部
４        ネットワーク
【要約】
【課題】通信されるデータ量を減らして通信帯域を有効利用することと、通信遅延を小さくすることとを同時に実現するデータ送信装置、プログラム及びシステムを提供する。
【解決手段】本発明のデータ送信装置２は、送信対象となるデータを複数の分割データに分割するデータ分割部２１２と、前記複数の分割データのそれぞれにこれら複数の分割データを識別する識別情報を紐付ける識別情報付与部２１３と、前記複数の分割データに対する一群のデータ処理を、並列処理可能な複数のスレッド２１１のいずれかに割り当てて実行するデータ処理部２１４と、を備え、前記一群のデータ処理は、前記複数の分割データのうち、所定の分割データを圧縮し、前記識別情報が紐付けられた複数の送信データを準備する送信データ準備処理と、データの配送順序を保証しない通信方式で前記複数の送信データを外部に送信する送信処理と、を含む。
【選択図】図１【図１】
0006823333.tif 000002
【図２】
0006823333.tif 000003
【図３】
0006823333.tif 000004
【図４】
0006823333.tif 000005
【図５】
0006823333.tif 000006
【図６】
0006823333.tif 000007
【図７】
0006823333.tif 000008
【図８】
0006823333.tif 000009
【図９】
0006823333.tif 000010
【図１０】
0006823333.tif 000011
【図１１】
0006823333.tif 000012
【図１２】
0006823333.tif 000013
【図１３】
0006823333.tif 000014
【図１４】
0006823333.tif 000015