(57)【要約】      （修正有）【課題】システム効率を下げることなく複数のスレッドがデータを並列処理する。【解決手段】データ処理装置１は、前記第１のスレッドに対するデータ入力の頻度に従って設定された第１の入力データモード４１と、前記第２のスレッドに対するデータ入力の頻度に従って設定された第２の入力データモード４２とが記憶された共有メモリと４０、第１のスレッド１０及び第２のスレッド２０を備える。第１のスレッド１０は、前記第１の入力データモード４１に従って入力されたデータを共有メモリ４０に記憶するとともに、前記データが前記第１のスレッド１０によって処理されるデータである場合、前記第１のスレッド１０に前記データを処理させ、前記データが前記第２のスレッド２０によって処理されるデータである場合、前記第１のスレッド１０に前記第２の入力データモード４２を読み出させて前記第２の入力データモード４２に従って処理する。【選択図】      図３
2005326973.tif 000002
【特許請求の範囲】
【請求項１】
第１のスレッドと第２のスレッドによって並列処理するデータ処理装置であって、
前記第１のスレッドに対するデータ入力の頻度に従って設定された第１の入力データモードと、前記第２のスレッドに対するデータ入力の頻度に従って設定され、前記第１のスレッドから読み出し可能な第２の入力データモードとが記憶されたメモリと、
前記第１のスレッドに前記メモリから前記第１の入力データモードを読み出させ前記第１の入力データモードに従って入力されたデータを前記メモリに記憶するとともに、前記データが前記第１のスレッドによって処理されるデータである場合、前記第１のスレッドに前記データを処理させ、前記データが前記第２のスレッドによって処理されるデータである場合、前記第１のスレッドに前記メモリから前記第２の入力データモードを読み出させて前記第２の入力データモードに従って処理させる中央処理制御装置
とを備えることを特徴とするデータ処理装置。
【請求項２】
前記入力データモードは、データの入力の通知を待機するブロッキングモードと、ポーリングしてデータの入力を確認するポーリングモードを少なくとも含み、
前記中央処理制御装置は、前記第１の入力データモードがブロッキングモードの場合、前記データの到着の通知を受信すると前記メモリから前記入力されたデータを読み出し、前記第１の入力データモードがポーリングモードの場合、前記第１のスレッドにポーリングさせてデータが入力されていることが検知されると前記入力されたデータを前記メモリに記憶させるとともに、前記データが前記第１のスレッドによって処理されるデータである場合、前記第１のスレッドによって前記データが処理され、前記データが前記第２のスレッドによって処理されるデータである場合、前記第１のスレッドに前記メモリから前記第２の入力データモードを読み出させ前記第２の入力データモードがブロッキングモードの場合、前記第１のスレッドに前記第２のスレッドへデータの入力を通知させる
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記中央処理制御装置は、前記メモリにおいて、前記第１の入力データモードがポーリングモードに設定されている場合、前記データの入力の通知を無視する
ことを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記中央処理制御装置は、前記第１のスレッドに前記第１の入力データモードに従って入力されたデータを前記メモリに記憶させる度に入力データカウンタを変化させて前記第１のスレッドに対するデータ入力の頻度を算出し、前記第１のスレッドに対するデータ入力の頻度と所定の閾値とを比較し、前記第１のスレッドに対するデータ入力の頻度が前記所定の閾値より高い場合、前記第１の入力データモードをポーリングモードに設定し、前記第１のスレッドに対するデータ入力の頻度が前記所定の閾値より低い場合、前記第１の入力データモードをブロッキングモードに設定する
ことを特徴とする請求項１乃至３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記中央処理制御装置は、前記第１のスレッドに前記入力されたデータを前記メモリに記憶させるとともに前記メモリに前記第１のスレッドによって処理されるデータを検索させ、前記第１のスレッドによって処理されるデータがある場合、前記第１のスレッドに、まず前記第１のスレッドによって処理されるデータを処理させ、次に前記第１のスレッドに前記メモリから前記第１の入力データモードを読み出して前記入力されたデータを処理させる
ことを特徴とする請求項１乃至４のいずれか１項に記載のデータ処理装置。
【請求項６】
第１のスレッドと第２のスレッドによって並列処理するデータ処理プログラムであって、
前記第１のスレッドに、前記メモリから前記第１のスレッドに対するデータ入力の頻度に従って設定された前記第１の入力データモードを読み出させるステップと、
前記第１の入力データモードに従って入力されたデータを前記メモリに記憶させるステップと、
前記データが前記第１のスレッドによって処理されるデータである場合、前記第１のスレッドに前記データを処理させるステップと、
前記データが前記第２のスレッドによって処理されるデータである場合、前記第１のスレッドに前記メモリから前記第２のスレッドに対するデータ入力の頻度に従って設定された第２の入力データモードを読み出させて前記第２の入力データモードに従って処理させるステップ
とをコンピュータに実行させることを特徴とするデータ処理プログラム。
【請求項７】
前記入力データモードは、データの入力の通知を待機するブロッキングモードと、ポーリングしてデータの入力を確認するポーリングモードを少なくとも含み、
前記第１の入力データモードがブロッキングモードの場合、前記データの到着の通知を受信すると前記メモリから前記入力されたデータを読み出すステップと、
前記第１の入力データモードがポーリングモードの場合、前記第１のスレッドにポーリングさせてデータが入力されていることが検知されると前記入力されたデータを前記メモリに記憶させるステップとを更にコンピュータに実行させ、
前記第２の入力データモードに従って処理させるステップは、
前記データが前記第１のスレッドによって処理されるデータである場合、前記第１のスレッドによって前記データが処理され、前記データが前記第２のスレッドによって処理されるデータである場合、前記第１のスレッドに前記メモリから前記第２の入力データモードを読み出させ前記第２の入力データモードがブロッキングモードの場合、前記第１のスレッドに前記第２のスレッドへデータの入力を通知させるステップである
ことを特徴とする請求項６に記載のデータ処理プログラム。
【請求項８】
前記メモリにおいて、前記第１の入力データモードがポーリングモードに設定されている場合、前記データの入力の通知を無視するステップ
を更にコンピュータに実行させることを特徴とする請求項７に記載のデータ処理プログラム。
【請求項９】
前記第１のスレッドに前記第１の入力データモードに従って入力されたデータを前記メモリに記憶させる度に入力データカウンタを変化させて前記第１のスレッドに対するデータ入力の頻度を算出するステップと、
前記第１のスレッドに対するデータ入力の頻度と所定の閾値とを比較し、前記第１のスレッドに対するデータ入力の頻度が前記所定の閾値より高い場合、前記第１の入力データモードをポーリングモードに設定し、前記第１のスレッドに対するデータ入力の頻度が前記所定の閾値より低い場合、前記第１の入力データモードをブロッキングモードに設定するステップ
を更にコンピュータに実行させることを特徴とする請求項６乃至８のいずれか１項に記載のデータ処理プログラム。
【請求項１０】
前記第１の入力データモードに従って入力されたデータを前記メモリに記憶させるステップは、
前記第１のスレッドに前記入力されたデータを前記メモリに記憶させるとともに前記メモリに前記第１のスレッドによって処理されるデータを検索させ、前記第１のスレッドによって処理されるデータがある場合、前記第１のスレッドに、まず前記第１のスレッドによって処理されるデータを処理させ、次に前記第１のスレッドに前記メモリから前記第１の入力データモードを読み出して前記入力されたデータを処理させるステップである
ことを特徴とする請求項６乃至９のいずれか１項に記載のデータ処理プログラム。
【請求項１１】
第１のスレッドと第２のスレッドによって並列処理するデータ処理方法であって、
前記第１のスレッドに、前記メモリから前記第１のスレッドに対するデータ入力の頻度に従って設定された前記第１の入力データモードを読み出させるステップと、
前記第１の入力データモードに従って入力されたデータを前記メモリに記憶させるステップと、
前記データが前記第１のスレッドによって処理されるデータである場合、前記第１のスレッドに前記データを処理させるステップと、
前記データが前記第２のスレッドによって処理されるデータである場合、前記第１のスレッドに前記メモリから前記第２のスレッドに対するデータ入力の頻度に従って設定された第２の入力データモードを読み出させて前記第２の入力データモードに従って処理させるステップ
を備えることを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドによってデータを並列処理するデータ処理装置、データ処理プログラム及びデータ処理方法に関する。
【背景技術】
【０００２】
近年、一つのアプリケーションソフトがスレッドと呼ばれる処理単位を複数生成し、並行して複数の処理を行うマルチスレッドと呼ばれる技術がある。このマルチスレッドにおいては、各スレッドにおいて共有可能なメモリを持ち、複数のスレッドが外部からのデータが入力され処理される。
【０００３】
例えば、通信ネットワークで利用されるデータ転送装置などにおいてデータの到着頻度を監視するアプリケーションプログラムにおいて、入力データによって処理するスレッドが固定される場合がある。具体的には、複数に分割されたパケットを連結してデータを生成し、連結されたデータに対して所定の処理を行う場合などがある。この場合、データを共有可能なメモリ上において処理する方法もあるが、データの排他制御のオーバーヘッドを避けるためには一連のパケットは同じスレッドによって処理されなければならない。この様に入力データによってそのデータを処理すべきスレッドが指定される場合、データを取り込んだスレッドがそのデータを処理すべきスレッドでない場合には入力データを処理するべきスレッドにデータを読み出させる必要がある。
【０００４】
このとき、データを取り込んだスレッドは、そのデータがどのスレッドで処理されるべきものであるかを調べ、それが自身のスレッドある場合、そのままデータを処理し、処理すべきデータが別のスレッドである場合、取り込んだデータを別のスレッドに読み出させる。
【０００５】
そこで、取り込んだデータを処理すべきスレッドに渡す方法として、例えば取り込んだデータの全てをそれを処理すべきスレッドに渡す方法もある。しかしこの方法では、システム全体からみると、通信ネットワークからのデータの取り込みと、他のスレッドからの取り込みの二度のデータの入力処理を行うことになり、非効率である。従って通常は、取り込んだデータを各スレッドが参照できる共有メモリ領域上に記憶し、処理すべきデータが来た通知のみを処理すべきスレッドに伝える方法がある。
【０００６】
この場合、通常はスリープモードで待機して、各スレッドは外部からのデータ入力と他スレッドからの通知とを待ってデータの処理を行う。具体的には各スレッドは、外部からのデータの入力及び他スレッドからの通知をブロッキング（いわゆるＩ／Ｏ待ち）して、待機する。外部からのデータの入力又は他スレッドからの通知が到着すると、オペレーティングシステムやカーネルなどのシステムが、データの入力を待機していたスレッドを起こして、起こされたスレッドがデータの取り込みを行う。
【０００７】
一方、ブロッキングしないでデータが入力されるまでループを繰り返す所謂ビジーウェイトで待機する方法もある。しかし、ビジーウェイトで待機する場合、ＣＰＵリソースを消費する問題があり、他に処理するべきデータがある場合、そのデータの処理に割けるＣＰＵリソースが少なくなるため、システム全体のパフォーマンスは低下してしまう問題がある。ここでビジーウェイト処理の負荷を下げるため、入力をチェックする間隔を延ばすと、データが届いてからそれを読むまでの応答時間が延び、応答性が低下する問題がある。従って一般にビジーウェイトでの待ちという方法は採用できない。
【０００８】
例えば、スレッドを管理する方法として、順序依存のある処理要求に関しては、依存するスレッドの完了を待ってスレッドを割り当て、順序依存のない処理要求に関しては空きスレッドができ次第、処理要求の発生順序に関わらず先に割り当てるスレッド管理システムがある（例えば、特許文献１）。
【０００９】
又、スレッドのスケジューリング方法に関する方法として、短い待ち時間イベントが発生した時は、代行の実行スレッドに一時的制御を与え、長い待ち時間イベントが発生した時は、代行の実行スレッドに完全な制御を与える多重スレッド使用方法がある（例えば、特許文献２）。
【特許文献１】特開２０００−２９３３８５号公報
【特許文献２】特開２００１−３５０６３８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、上述した従来のデータ入力方法においては、データの入力と他スレッドからの通知を待つために、ブロッキングしてデータの到着を待つので、入力データが大量にある時も常に、ブロックするべきか、或いはブロックせずに直ぐにデータをスレッドに渡せるかの検査を行うことになる。更に、他スレッドの処理すべきデータを取り込んだ場合には、他スレッドに通知するための通知処理が必要になり、入力データが大量にある時のデータ入力の効率が落ちてしまう問題がある。
【００１１】
この様に、大量に入力データがある場合、スリープモードで待機する必要はないので、ポーリングで入力データを取り込めば良い。しかし、データが少ない時には、先のビジーウェイトの問題があって、ポーリングで入力データを取り込むことは、システムとしての効率が良くない問題がある。又、データの通知処理を行わなければならない問題がある。
【００１２】
又、上述した特許文献１及び特許文献２に記載の方法は、それぞれスレッドの制御方法に関するものであって、一連のデータを一つのスレッドで入力させる場合のスレッドのデータ入力に関するものではない。
【００１３】
これらの状況を踏まえ、一連のデータを一つのスレッドで入力させる場合に、入力データが少ない時でもシステムとしての効率を下げることなく、入力データが大量にある時のデータのチェックに起因するデータ入力の効率の低下を引き起こさず、他スレッドへの通知処理による効率低下のない入力データの処理が求められている。
【００１４】
従って本発明の目的は、システム効率を下げることなく複数のスレッドがデータを並列処理するデータ処理装置、データ処理プログラム及びデータ処理方法を提供することである。
【課題を解決するための手段】
【００１５】
上記課題を解決するために、本発明の第１の特徴は、第１のスレッドと第２のスレッドによって並列処理するデータ処理装置に関する。即ち本発明の第１の特徴に係るデータ処理装置は、第１のスレッドに対するデータ入力の頻度に従って設定された第１の入力データモードと、第２のスレッドに対するデータ入力の頻度に従って設定され、第１のスレッドから読み出し可能な第２の入力データモードとが記憶されたメモリと、第１のスレッドにメモリから第１の入力データモードを読み出させ第１の入力データモードに従って入力されたデータをメモリに記憶するとともに、データが第１のスレッドによって処理されるデータである場合、第１のスレッドにデータを処理させ、データが第２のスレッドによって処理されるデータである場合、第１のスレッドにメモリから第２の入力データモードを読み出させて第２の入力データモードに従って処理させる中央処理制御装置とを備える
これによれば、データの入力の頻度によって、入力されるデータの待機方法が設定されるので、データの入力の頻度が高い場合に負荷となるカーネルのオーバーヘッド時間を考慮して、システム効率を下げることなく複数のスレッドがデータを並列処理することができる。又、ここでは、第１のスレッドと第２のスレッドで並列処理する場合について説明したが、第３のスレッドなど他の複数のスレッドと並列処理しても良い。
【００１６】
より具体的には、入力データモードは、データの入力の通知を待機するブロッキングモードと、ポーリングしてデータの入力を確認するポーリングモードを少なくとも含み、中央処理制御装置は、第１の入力データモードがブロッキングモードの場合、データの到着の通知を受信するとメモリから入力されたデータを読み出し、第１の入力データモードがポーリングモードの場合、第１のスレッドにポーリングさせてデータが入力されていることが検知されると入力されたデータをメモリに記憶させるとともに、データが第１のスレッドによって処理されるデータである場合、第１のスレッドによってデータが処理され、データが第２のスレッドによって処理されるデータである場合、第１のスレッドにメモリから第２の入力データモードを読み出させ第２の入力データモードがブロッキングモードの場合、第１のスレッドに第２のスレッドへデータの入力を通知させることが好ましい。ここで、中央処理制御装置は、メモリにおいて、第１の入力データモードがポーリングモードに設定されている場合、データの入力の通知を無視することが好ましい。
【００１７】
これによれば、入力頻度が少ない時はブロッキングモードでデータの通知を待機し、入力頻度が高い時はポーリングモードで能動的にデータを取得するので、入力頻度が高い時に他のスレッドによる通知やカーネルによるスレッドを起こす指示などに必要なオーバーヘッド時間を削減することができる。
【００１８】
更に、中央処理制御装置は、第１のスレッドに第１の入力データモードに従って入力されたデータをメモリに記憶させる度に入力データカウンタを変化させて第１のスレッドに対するデータ入力の頻度を算出し、第１のスレッドに対するデータ入力の頻度と所定の閾値とを比較し、第１のスレッドに対するデータ入力の頻度が所定の閾値より高い場合、第１の入力データモードをポーリングモードに設定し、第１のスレッドに対するデータ入力の頻度が所定の閾値より低い場合、第１の入力データモードをブロッキングモードに設定することが好ましい。
【００１９】
これによれば、第１のスレッドにデータが入力される度に入力データカウンタを変化させるので、例えば定期的にこの入力データカウンタを読み出して単位時間当たりの入力データ数を算出することができる。これを所定の閾値と比較することにより入力データモードを決定することができる。
【００２０】
更に、中央処理制御装置は、第１のスレッドに入力されたデータをメモリに記憶させるとともにメモリに第１のスレッドによって処理されるデータを検索させ、第１のスレッドによって処理されるデータがある場合、第１のスレッドに、まず第１のスレッドによって処理されるデータを処理させ、次に第１のスレッドにメモリから第１の入力データモードを読み出して入力されたデータを処理させることが好ましい。
【００２１】
これによれば、データが入力される度に、共有メモリを参照してそのスレッド自身が処理するデータを検索して処理するので、他のスレッドによって書き込まれたデータを処理した後、入力されたデータを処理することができるので、データの到着順序と処理順序を同一に保つことができる。
【００２２】
本発明の第２の特徴は、第１のスレッドと第２のスレッドによって並列処理するデータ処理プログラムである。本発明の第２の特徴に係るデータ処理プログラムは、第１のスレッドに、メモリから第１のスレッドに対するデータ入力の頻度に従って設定された第１の入力データモードを読み出させるステップと、第１の入力データモードに従って入力されたデータをメモリに記憶させるステップと、データが第１のスレッドによって処理されるデータである場合、第１のスレッドにデータを処理させるステップと、データが第２のスレッドによって処理されるデータである場合、第１のスレッドにメモリから第２のスレッドに対するデータ入力の頻度に従って設定された第２の入力データモードを読み出させて第２の入力データモードに従って処理させるステップとをコンピュータに実行させる
ここで、入力データモードは、データの入力の通知を待機するブロッキングモードと、ポーリングしてデータの入力を確認するポーリングモードを少なくとも含み、第１の入力データモードがブロッキングモードの場合、データの到着の通知を受信するとメモリから入力されたデータを読み出すステップと、第１の入力データモードがポーリングモードの場合、第１のスレッドにポーリングさせてデータが入力されていることが検知されると入力されたデータをメモリに記憶させるステップとを更にコンピュータに実行させ、第２の入力データモードに従って処理させるステップは、データが第１のスレッドによって処理されるデータである場合、第１のスレッドによってデータが処理され、データが第２のスレッドによって処理されるデータである場合、第１のスレッドにメモリから第２の入力データモードを読み出させ第２の入力データモードがブロッキングモードの場合、第１のスレッドに第２のスレッドへデータの入力を通知させるステップであることが好ましい。
【００２３】
更に、メモリにおいて、第１の入力データモードがポーリングモードに設定されている場合、データの入力の通知を無視するステップを更にコンピュータに実行させることが好ましい。
【００２４】
更に、第１のスレッドに第１の入力データモードに従ってデータを取り込む度に入力データカウンタを変化させて第１のスレッドに対するデータ入力の頻度を算出するステップと、第１のスレッドに対するデータ入力の頻度と所定の閾値とを比較し、第１のスレッドに対するデータ入力の頻度が所定の閾値より高い場合、第１の入力データモードをポーリングモードに設定し、第１のスレッドに対するデータ入力の頻度が所定の閾値より低い場合、第１の入力データモードをブロッキングモードに設定するステップを更にコンピュータに実行させることが好ましい。
【００２５】
更に、第１の入力データモードに従って入力されたデータをメモリに記憶させるステップは、第１のスレッドに入力されたデータをメモリに記憶させるとともにメモリに第１のスレッドによって処理されるデータを検索させ、第１のスレッドによって処理されるデータがある場合、第１のスレッドに、まず第１のスレッドによって処理されるデータを処理させ、次に第１のスレッドにメモリから第１の入力データモードを読み出して入力されたデータを処理させるステップであることが好ましい。
【００２６】
本発明の第３の特徴は、第１のスレッドと第２のスレッドによって並列処理するデータ処理方法に関する。即ち本発明の第３の特徴に係るデータ処理方法は、第１のスレッドに、メモリから第１のスレッドに対するデータ入力の頻度に従って設定された第１の入力データモードを読み出させるステップと、第１の入力データモードに従って入力されたデータをメモリに記憶させるステップと、データが第１のスレッドによって処理されるデータである場合、第１のスレッドにデータを処理させるステップと、データが第２のスレッドによって処理されるデータである場合、第１のスレッドにメモリから第２のスレッドに対するデータ入力の頻度に従って設定された第２の入力データモードを読み出させて第２の入力データモードに従って処理させるステップを備える
【発明の効果】
【００２７】
本発明によれば、システム効率を下げることなく複数のスレッドがデータを並列処理するデータ処理装置、データ処理プログラム及びデータ処理方法を提供することができる。
【発明を実施するための最良の形態】
【００２８】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【００２９】
（最良の実施の形態）
図１に示すように本発明の最良の実施の形態に係るデータ処理装置１は、例えば、第１のスレッド１０、第２のスレッド２０、第３のスレッド３０によってそれぞれ並列処理され、共有メモリ４０、第１のディスクリプタ５１、第２のディスクリプタ５２、第３のディスクリプタ５３、ソケットディスクリプタ５４を備えている。データ処理装置１は、複数の各ディスクリプタを備えていても良い。
【００３０】
共有メモリ４０は、第１のスレッド１０、第２のスレッド２０、第３のスレッド３０から参照可能な記憶装置であって、第１のスレッド１０に対するデータ入力の頻度に従って設定された第１の入力データモード４１と、第２のスレッド２０に対するデータ入力の頻度に従って設定された第２の入力データモード４２と、第３のスレッド３０に対するデータ入力の頻度に従って設定された第３の入力データモード４３が記憶されている。
【００３１】
第１のディスクリプタ５１は、第２のスレッド２０、第３のスレッド３０などの第１のスレッド以外のスレッドからデータ到着の通知を受けるためのＦＩＦＯ（First-In First-Out）のディスクリプタである。第２のディスクリプタ５２、第３のディスクリプタも同様である。
【００３２】
ソケットディスクリプタ５４は、通信ネットワークなどのデータ処理装置１の外部からの入力を取り込むためのソケットのディスクリプタである。通常socket(2)で作成される。外部からの入力データは、スレッドによってこのソケットディスクリプタをread(2)することで取り込める。
【００３３】
図２に示すように、本発明の最良の実施の形態に係るデータ処理装置１は、中央処理制御装置１０１、ＲＯＭ（Read Only Memory）１０２、ＲＡＭ（Random Access Memory）１０３及び入出力インタフェース１０９が、バス１１０を介して接続されている。入出力インタフェース１０９には、入力装置１０４、表示装置１０５、通信制御装置１０６、記憶装置１０７及びリムーバブルディスク１０８が接続されている。
【００３４】
中央処理制御装置１０１は、入力装置１０４からの入力信号に基づいてＲＯＭ１０２からデータ処理装置１を起動するためのブートプログラムを読み出して実行し、更に記憶装置１０７に記憶されたオペレーティングシステムを読み出す。更に中央処理制御装置１０１は、入力装置１０４や通信制御装置１０６などの入力信号に基づいて、各種装置の制御を行ったり、ＲＡＭ１０３や記憶装置１０７などに記憶されたプログラム及びデータを読み出してＲＡＭ１０３にロードするとともに、ＲＡＭ１０３から読み出されたプログラムのコマンドに基づいて、データの計算又は加工など、後述する一連の処理を実現する処理装置である。
【００３５】
入力装置１０４は、操作者が各種の操作を入力するキーボード、マウスなどの入力デバイスにより構成されており、操作者の操作に基づいて入力信号を作成し、入出力インタフェース１０９及びバス１１０を介して中央処理制御装置１０１に送信される。表示装置１０５は、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどであり、中央処理制御装置１０１からバス１１０及び入出力インタフェース１０９を介して表示装置１０５において表示させる出力信号を受信し、例えば中央処理制御装置１０１の処理結果などを表示する装置である。通信制御装置１０６は、ＬＡＮカードやモデムなどの装置であり、データ処理装置１をインターネットやＬＡＮなどの通信ネットワークに接続する装置である。通信制御装置１０６を介して通信ネットワークと送受信したデータは入力信号又は出力信号として、入出力インタフェース及びバス１１０を介して中央処理制御装置１０１に送受信される。
【００３６】
記憶装置１０７は磁気ディスク装置であって、中央処理制御装置１０１で実行されるプログラムやデータが記憶されている。リムーバブルディスク１０８は、光ディスクやフレキシブルディスクのことであり、ディスクドライブによって読み書きされた信号は、入出力インタフェース１０９及びバス１１０を介して中央処理制御装置１０１に送受信される。
【００３７】
本発明の第１の実施の形態に係るデータ処理装置１の記憶装置１０７には、データ処理プログラムが記憶されるとともに、共有メモリ４０が実装される。又、データ処理プログラムがデータ処理装置１の中央処理制御装置１０１に読み込まれ実行されることによって、図３に示す入力待機手段１１、データ入力分配手段１２及びデータ処理手段１３がデータ処理装置１に実装される。
【００３８】
次に、図３を参照して、本発明の最良の実施の形態に係るデータ処理装置１を説明する。図３においては、第１のスレッド１０について詳細に記載しているが、第２のスレッド２０及び第３のスレッド３０についても同様である。
【００３９】
第１のスレッド１０は、入力待機手段１１、データ入力分配手段１２及びデータ処理手段１３を備えている。
【００４０】
入力待機手段１１は、select(2)/poll(2)等により、多重化された入力を同期化する手段である。入力待機手段１１は、共有メモリ４０から第１の入力データモード４１を読み出し、読み出された入力データモード４１に従って、データの入力を待機する手段である。具体的には、入力待機手段１１は、第１のディスクリプタ５１、ソケットディスクリプタ５４の入力を待機し、データが届くと、データ入力分配手段１２に入力すべきデータが存在することを通知する。入力待機手段１１は、第１のディスクリプタ５１又はソケットディスクリプタ５４を読み出してデータが書き込まれたことを検知する。入力待機手段１１がデータを待機する方法は、select(2)/poll(2)には限らない。例えば、ＰＯＳＩＸ実時間シグナルでデータの到着をシグナルで検出する手段もあり得る。
【００４１】
入力待機手段１１は、切替部６１、ポーリング部６２及びブロッキング部６３を備えている。
【００４２】
切替部６１は、共有メモリ４０から第１の入力データモード４１を読み出して、設定された入力データモードに従って、ポーリングを実行するポーリング部６２或いはブロッキングを実行するブロッキング部６３に、それぞれデータが入力されたことを検知させる。更に、切替部６１は、一定時間毎に第１の入力データモードを読み出して、ポーリング部６２及びブロッキング部６３の制御を切り換えるのが好ましい。
【００４３】
ここで、入力データモードは、データの入力の通知を待機するブロッキングモードと、ポーリングしてデータの入力を確認するポーリングモードがある。第１のスレッド１０は、第１の入力データモード４１がブロッキングモードの場合、データの到着の通知を受信すると入力されたデータをメモリに記憶し、第１の入力データモードがポーリングモードの場合、ポーリングした時にデータが入力されている時に入力されたデータをメモリに記憶する。
【００４４】
具体的には、ポーリング部６２は、定期的に第１のディスクリプタ５１及びソケットディスクリプタ５４に対してポーリングし、データの到着を確認する。データが到着していた場合は、データ入力分配手段１２にデータが到着したことを通知する。このとき、入力待機手段１１は、他スレッドからデータ入力の通知が到着したとしても、通知を無視して、何も実行しない。一方、ブロッキング部６３は、第１のディスクリプタ５１又はソケットディスクリプタ５４に通知されると、カーネルによってスリープモードからアクティブモードに遷移させられ、データが到着したことをデータ入力部７１に通知する。
【００４５】
データ入力分配手段１２は、入力待機手段１１によって入力データがあることの通知を受取、実際に各ディスクリプタからデータを取り込む手段である。入力待機手段１１から取り込むべきデータがある旨の通知を受けると、データを共有メモリ４０に記憶するとともに、データが第１のスレッド１０によって処理されるデータである場合、第１のスレッド１０のデータ処理手段１３にデータを処理させる。一方、データが第２のスレッド２０によって処理されるデータである場合、データ入力分配手段１２は、共有メモリ４０から第２の入力データモード４２を読み出して第２の入力データモード４２に従って処理する。具体的には、第２の入力データモード４２がブロッキングモードの場合、第１のスレッド１０のデータ入力分配手段１２は、第２のスレッド２０へデータの入力を通知する。第２の入力データモード４２がポーリングモードの場合、データ入力分配手段１２は何も実行せず、第２のスレッド２０が共有メモリ４０に入力データを確認するためにポーリングするのを待機する。
【００４６】
データ入力分配手段１２は、データ入力部７１、分配部７２、入力データカウンタ７３、混雑度判定部７４を備えている。
【００４７】
データ入力部７１は、入力待機手段１１から取り込むべきデータがある旨の通知を受けると、まず、共有メモリ４０を読み出して、第２のスレッド２０又は第３のスレッド３０など第１のスレッド１０でない他スレッドが共有メモリ４０に取り込んで、第１のスレッド１０によって処理されるべきデータがあるかないかを検査する。第１のスレッド１０が処理するべきデータがある場合、そのデータをデータ処理手段１３に渡して、データ処理手段１３に処理させる。
【００４８】
その後、データ入力部７１は、第１のディスクリプタ５１及びソケットディスクリプタ５４を検査し、入力すべきデータがあればデータを取り込む。更にデータ入力部７１は、取り込んだデータが第１のスレッド１０で処理されるべきデータであるかを判定する。第１のスレッド１０で処理されるべきデータの場合、データ処理手段１３に渡して処理させる。このとき、第１のディスクリプタ５１に入力すべきデータがあった場合、即ち、第１のスレッド１０が他スレッドから取り込むべきデータがある旨の通知を受けた場合、データ入力部７１は、その入力データをデータ処理手段１３に渡さず、共有メモリ４０から読み出してデータ処理手段１３に渡す。このとき、データ入力部７１が共有メモリ４０からデータを読み出しても良いし、データ入力部７１がデータ処理手段１３に、共有メモリ４０に処理するべきデータがあることだけを通知して、データ処理手段１３に共有メモリ４０上のデータを読み出させても良い。
【００４９】
一方、データ入力部７１によって取り込まれたデータが第１のスレッド１０によって処理されるべきデータでない場合、分配部７２に他スレッドへ通知させる。
【００５０】
又、データ入力部７１は、入力待機手段１１からデータの入力の通知を受ける度に、入力データ数をカウントするために、入力データカウンタを変化させる。例えば、通知を一つ受ける度に入力データカウンタを一つインクリメントする。
【００５１】
この様に、データ入力部７１は、各ディスクリプタから取り込むべきデータがある旨の通知を受けた時、共有メモリ４０上に第１のスレッド１０によって処理されるべきデータがあるか否かを検査する。共有メモリ４０上に第１のスレッド１０によって処理されるべきデータがあった場合、まずそのデータを処理して、その後に各ディスクリプタから通知を受けたデータを処理する。従って、先に到着したと考えられる共有メモリ上のデータを先に処理するので、データの到着順序と処理順序の同一性が保たれる。
【００５２】
分配部７２は、データ入力部７１によって取り込まれたデータを処理すべきスレッドを特定する。その後、分配部７２は、共有メモリ４０から処理すべきスレッドの入力データモードを読み出すとともにその取り込んだデータを共有メモリ４０に記憶する。その入力データモードがブロッキングモードの場合、分配部７２は、そのスレッドに対応するディスクリプタにデータがある旨を書き込む。例えば、データ入力部７１によって取り込まれたデータが第２のスレッド２０によって処理されるべきデータである場合、分配部７２は、取り込んだデータを共有メモリ４０に記憶した後、第２のディスクリプタ５２にデータがある旨を書き込む。このときに書き込むデータは、共有メモリにデータがおいてある旨を伝えるだけなので、取り込んだデータそのものではなく、ダミーの１バイトのデータで良く、第２のスレッド２０に共有メモリ４０から入力されたデータを読み出させるのが好ましい。
【００５３】
混雑度判定部７４は、入力データカウンタ７３を読み出して第１のスレッド１０に対するデータ入力の頻度を算出し、第１のスレッド１０に対するデータ入力の頻度と所定の閾値とを比較し、第１のスレッド１０に対するデータ入力の頻度が所定の閾値より高い場合、第１の入力データモード４１をポーリングモードに設定し、第１のスレッド１０に対するデータ入力の頻度が所定の閾値より低い場合、第１の入力データモード４１をブロッキングモードに設定する。混雑度判定部７４は、例えば１秒毎などの一定時間毎に入力データカウンタ７３を参照し、前回の参照時からの入力データ数を算出し、一定時間の入力データ数に基づいて入力待機手段１１の待機方法を決定する。入力が混んでいる場合、即ち一定時間の入力データ数が所定の閾値より高い場合は、共有メモリ４０の第１の入力データモード４１をポーリングモードに設定する。一方、入力が空いている場合、即ち一定時間の入力データ数が所定の閾値より少ない場合は、共有メモリ４０の第１の入力データモード４１をブロッキングモードに設定する。入力データモードが設定された後、入力データカウンタ７３はクリアされる。
【００５４】
ここで設定される閾値は、例えば、１秒間に３０００パケットなどの数値データである。この閾値は、通信ネットワークの混雑度、データ処理装置１のスペック、データ処理装置１の処理内容等に応じて任意に設定されるのが好ましい。
【００５５】
データ処理手段１３は、各スレッド自身で処理すべき所定の処理を行う手段である。データ処理手段１３は、データ入力分配手段１２によって取り込まれたデータを入力として、所定の処理を行う。
【００５６】
次に、図４を参照して、本発明の最良の実施の形態に係るデータ処理方法について説明する。ここでは、図３と同様に、第１のスレッド１０の処理について説明する。
【００５７】
まず、ステップＳ１０１において、入力待機手段１１によって、第１の入力データモード４１が読み出され、第１の入力データモードがブロッキングモードであるか、ポーリングモードであるかが読み出される。ブロッキングモードである場合、ステップＳ１０２において、入力待機手段１１に第１のディスクリプタ５１及びソケットディスクリプタ５４にデータが到着し、カーネルによって起こされるのを待機させる。データが到着すると、入力待機手段１１によってその旨がデータ入力分配手段１２に通知され、ステップＳ１０５の処理に進む。一方、ブロッキングモードでない場合、即ちポーリングモードの場合、ステップＳ１０３において、入力待機手段１１によって第１のディスクリプタ５１及びソケットディスクリプタ５４が参照されてデータの到着が検査され、ステップＳ１０４において、データが到着していない場合は、ステップＳ１０３の処理が繰り返される。ステップＳ１０４においてデータが到着している場合、その旨がデータ入力分配手段１２に通知され、ステップＳ１０５の処理に進む。
【００５８】
次に、ステップＳ１０５において、入力待機手段１１からデータが到着した通知を受信すると、データ入力分配手段１２によって、共有メモリ４０が読み出され、共有メモリ４０上に自身が処理すべきデータがあるか否かが検査される。共有メモリ４０上に自身が処理すべきデータがあった場合、ステップＳ１０６において、データ処理手段１３に通知され、データ処理手段１３に共有メモリ上のデータを処理させる。
【００５９】
次に、ステップＳ１０７において、データ入力分配手段１２に入力待機手段１１から入力されたデータを取り込ませるとともに、ステップＳ１０８において、入力データカウンタが一つインクリメントされる。
【００６０】
ステップＳ１０７においてデータが取り込まれると、ステップＳ１０９において、データ入力分配手段１２によって、そのデータを処理するべきスレッドを調べる。ステップＳ１１０において第１のスレッド１０が処理すべきデータであると判定される場合、ステップＳ１１１において、データ処理手段１３に取り込んだデータを処理させる。
【００６１】
一方、ステップＳ１１０において第１のスレッド１０以外のスレッドが処理すべきデータであると判定される場合、ステップＳ１１２において、ステップＳ１０７で取り込んだデータを共有メモリ４０に記憶する。更に、ステップＳ１１３において、共有メモリ４０から処理するべきスレッドの入力データモード４１がブロッキングモードであるか否かを判定する。ブロッキングモードである場合、ステップＳ１１４において、当該スレッドに対応するディスクリプタにダミーデータを書き込み、当該スレッドに通知する。
【００６２】
これらの処理が終了すると、ステップＳ１０１に戻って次のデータパケットの到着を待機する。外部からデータ処理を継続しないコマンドが入力されると、これらの処理を終了する。
【００６３】
次に、図５を参照して、本発明の最良の実施の形態に係る混雑度判定部７４による混雑度判定処理を説明する。  
ステップＳ２０１において、混雑度を判定する閾値を読み出し、入力データカウンタが、閾値以上であるか否かを判定する。閾値以上である場合、ステップＳ２０２において、第１の入力データモード４１をブロッキングモードに設定し、閾値以下である場合、ステップＳ２０３において入力データモードをポーリングモードに設定する。  
ここで、入力データモードの変更が完了すると、ステップＳ２０４において、入力データカウンタがクリアされる。
【００６４】
上述した様に、本発明の最良の実施の形態に係るデータ処理装置の第１のスレッドは、入力されるデータ頻度が低い場合、第１のスレッドに対応する第１のディスクリプタとソケットディスクリプタからのデータの到着の通知を待機する。一方、入力されるデータ頻度が高い場合、第１のスレッドは、能動的にソケットディスクリプタへデータの到着を確認し、その都度、共有メモリを参照して、他のスレッドで取り込まれ共有メモリに記憶され、第１のスレッドで処理されるべきデータを検索して処理する。
【００６５】
これにより、データの入力頻度が低い時には、データが到着する度に通知を受けて処理することにより、応答性を確保することができる。一方、データの入力頻度が高い時には、スレッド自身が能動的にデータを取りに行くので、通知に要するオーバーヘッドを少なくすることができる。
【００６６】
この様に本発明の最良の実施の形態に係るデータ処理装置は、データの入力頻度が低い時には、データが到着する度に通知を受けて処理することにより、応答性を確保することができる。一方、データの入力頻度が高い時には、スレッド自身が能動的にデータを取りに行くので、通知に要するオーバーヘッドを少なくすることができる。従って、システム効率を下げることなく複数のスレッドがデータを並列処理することができる。具体的には、本発明の最良の実施の形態に係るデータ処理装置は、入力頻度が少ない時はブロッキングモードでデータの通知を待機し、入力頻度が高い時はポーリングモードで能動的にデータを取得するので、入力頻度が高い時に他のスレッドによる通知やカーネルによるスレッドを起こす指示などに必要なオーバーヘッド時間を削減することができる。
【００６７】
ここで、取り込まれたデータがそのスレッド自身によって処理されるべきデータであるか否かを判定し、そのスレッド自身で処理されるべきデータでない場合、処理されるべきスレッドにデータが到着したことが通知される。従って、本発明の最良の実施の形態に係るデータ処理装置は、特に、断続的に到着するデータパケットを同じスレッドで処理させたい場合に好適である。
【００６８】
又、第１のスレッドにデータが入力される度に入力データカウンタを変化させるので、例えば定期的にこの入力データカウンタを読み出して単位時間当たりの入力データ数を算出することができる。これを所定の閾値と比較することにより入力データモードを決定することができる。
【００６９】
更に、データが入力される度に、共有メモリを参照してそのスレッド自身が処理するデータを検索して処理するので、他のスレッドによって書き込まれたデータを処理した後、入力されたデータを処理することができるので、データの到着順序と処理順序を同一に保つことができる。
【００７０】
又、本発明の最良の実施の形態においては、データ処理装置１の第１のスレッド１０の動作について説明したが、第２のスレッド２０及び第３のスレッド３０も同様に動作する。又、図示しないが、第４のスレッドなどの他のスレッドも同様に動作することは勿論である。
【００７１】
（その他の実施の形態）
上記のように、本発明の最良の実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなる。
【００７２】
本発明の最良の実施の形態に係るデータ処理装置１の混雑度判定部７４は、所定の閾値によって入力データモードが決定されていたが、この所定の閾値は、データ処理装置１の管理者等によって設定されても良い。具体的に混雑度判定部７４は、管理者に閾値を設定させる設定画面を提示し、管理者によって入力された数値を受信して、閾値として設定しても良い。又、閾値は、データ処理装置の処理能力や混雑度などに応じて、随時算出されて設定されても良い。
【００７３】
又、処理すべきデータがある旨を通知する手段として、本発明の最良の実施の形態においては、ＦＩＦＯを挙げたがそれに限定されるものではない。例えばシグナルで通知する方法を用いても良い。この場合、通知するスレッドでは、通知のためのシグナル送信処理が不要になり、通知を受けるスレッドでは、シグナルハンドラを介しする初期化処理などが不要になる。これにより、シグナルで通知する方法においても、本発明の最良の実施の形態に係るデータ処理装置と同様にカーネルのオーバーヘッド時間を少なくすることができる。
【００７４】
又、本発明の最良の実施の形態においては、スレッド毎に入力データカウンタを備えたが、共有メモリ上に、全てのスレッドでの入力データ数を記憶する入力データカウンタを備え、そのデータに基づいて入力待機方法が決定されても良い。
【００７５】
又、入力待機手段１１によって参照される第１の入力データモード４１は、第１のスレッド１０の内部変数として保持されても良い。この場合、第１のスレッド１０は、入力待機手段１１によって参照される内部変数としての入力データモードと、第２のスレッド２０又は第３のスレッド３０によって参照され共有メモリ４０に記憶される第１の入力データモード４１とを備えることになり、これらのデータは定期的に同期されるのが好ましい。入力待機手段１１が内部変数として具備された入力データモードを参照する場合、共有メモリ４０から読み出す処理に比べて更にオーバーヘッドを少なくすることができる。
【００７６】
本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。従って、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【００７７】
【図１】本発明の最良の実施の形態に係るデータ処理装置の機能ブロック図である。
【図２】本発明の最良の実施の形態に係るデータ処理装置のハードウェア構成図である。
【図３】本発明の最良の実施の形態に係るデータ処理装置の詳細な機能ブロック図である。
【図４】本発明の最良の実施の形態に係るデータ処理方法のフローチャートである。
【図５】本発明の最良の実施の形態に係る混雑度判定部の処理を示したフローチャートである。
【符号の説明】
【００７８】
１…データ処理装置
１０…第１のスレッド
１１…入力待機手段
１２…データ入力分配手段
１３…データ処理手段
２０…第２のスレッド
３０…第３のスレッド
４０…共有メモリ
４１…入力データモード
４１…第１の入力データモード
４２…第２の入力データモード
４３…第３の入力データモード
５１…第１のディスクリプタ
５２…第２のディスクリプタ
５３…第３のディスクリプタ
５４…ソケットディスクリプタ
６１…切替部
６２…ポーリング部
６３…ブロッキング部
７１…データ入力部
７２…分配部
７３…入力データカウンタ
７４…混雑度判定部
１０１…中央処理制御装置
１０２…ＲＯＭ
１０３…ＲＡＭ
１０４…入力装置
１０５…表示装置
１０６…通信制御装置
１０７…記憶装置
１０８…リムーバブルディスク
１０９…入出力インタフェース
１１０…バス
【図１】
2005326973.tif 000003
【図２】
2005326973.tif 000004
【図３】
2005326973.tif 000005
【図４】
2005326973.tif 000006
【図５】
2005326973.tif 000007