(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024143213
(43)【公開日】2024-10-11
(54)【発明の名称】サーバ装置、マルチスレッド処理方法、マルチスレッド処理プログラム
(51)【国際特許分類】
G06F 9/50 20060101AFI20241003BHJP
【FI】
G06F9/50 150D
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2023055764
(22)【出願日】2023-03-30
(71)【出願人】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】230120499
【弁護士】
【氏名又は名称】藤江 和典
(74)【代理人】
【識別番号】100201385
【弁理士】
【氏名又は名称】中安 桂子
(72)【発明者】
【氏名】小林 広樹
(57)【要約】 (修正有)
【課題】サーバ装置のCPUリソースを効率的に使用でき、サーバ全体の処理時間を短縮化することによって、通信の低遅延化を実現できるに自動車等の移動体に搭載された通信機と接続するサーバ装置、マルチスレッド処理方法及びマルチスレッド処理プログラムを提供する。
【解決手段】複数のクライアント通信機10と接続するサーバ装置200であって、クライアント通信機から接続要求信号及びデータを受信する受信部101と、データを外部装置203に送信する第1のスレッドを実行する第1の送信部201と、データを外部装置に送信する第2のスレッドを実行する第2の送信部202と、接続要求信号に基づき、クライアント通信機から受信したデータの送信を第1のスレッド及び第2のスレッドのいずれで行うかを割当てるスレッド割当部102と、を有する。
【選択図】
図7
【特許請求の範囲】
【請求項1】
複数のクライアント通信機(10)と接続するサーバ装置(200)であって、
前記クライアント通信機から接続要求信号及びデータを受信する受信部(101)と、
前記データを外部装置(203)に送信する第1のスレッドを実行する第1の送信部(201)と、
前記データを前記外部装置に送信する第2のスレッドを実行する第2の送信部(202)と、
前記接続要求信号に基づき、前記クライアント通信機から受信した前記データの送信を前記第1のスレッド及び前記第2のスレッドのいずれで行うかを割当てるスレッド割当部(102)と、を有する、
サーバ装置。
【請求項2】
前記受信部は、第1のキュー及び第2のキューを有し、
前記受信部は、前記スレッド割当部が前記第1のスレッドを割当てた場合は前記データを前記第1のキューに保存し、前記スレッド割当部が前記第2のスレッドを割当てた場合は前記データを前記第2のキューに保存し、
前記第1の送信部は、前記第1のキューから前記データを読出して前記外部装置に送信し、
前記第2の送信部は、前記第2のキューから前記データを読出して前記外部装置に送信する、
請求項1記載のサーバ装置。
【請求項3】
当該サーバ装置は複数のCPU(106)を有し、
前記前記第1の送信部は、前記複数のCPUのうち1のCPUである第1のCPUで前記第1のスレッドを実行し、
前記前記第2の送信部は、前記複数のCPUのうち他のCPUである第2のCPUで前記第2のスレッドを実行し、
前記第1のスレッド及び前記第2のスレッドは、並列処理される、
請求項1記載のサーバ装置。
【請求項4】
前記スレッド割当部は、前記第1のCPU使用率及び前記第2のCPU使用率を求め、
前記第1のCPU使用率が前記第2のCPU使用率よりも低い場合は前記第1のスレッドを割当て、
前記第2のCPU使用率が前記第1のCPU使用率よりも低い場合は前記第2のスレッドを割当てる、
請求項3記載のサーバ装置。
【請求項5】
前記データを前記外部装置に送信するスレッドを実行する送信部を有するとともに、前記送信部は前記第1のCPUで前記スレッドを実行し、
前記第1のCPUが所定の使用率を超える場合、前記第2のスレッドを起動して前記第2のCPUで前記第2のスレッドを実行することにより前記第2の送信部とするとともに、前記送信部を前記第1の送信部とする、
請求項3記載のサーバ装置。
【請求項6】
前記クライアント通信機は、移動体に搭載されている、
請求項1記載のサーバ装置。
【請求項7】
前記データは、前記移動体に搭載された撮像装置が撮影した画像である、
請求項6記載のサーバ装置。
【請求項8】
複数のクライアント通信機と接続するサーバ装置で実行されるマルチスレッド処理方法であって、
前記クライアント通信機から接続要求信号及びデータを受信し(S102、S104)、
前記データを外部装置に送信する第1のスレッド及び前記データを前記外部装置に送信する第2のスレッドを起動し(S101、S200)、
前記接続要求信号に基づき、前記クライアント通信機から受信した前記データの送信を前記第1のスレッド及び前記第2のスレッドのいずれで行うかを割当てる(S103)、
マルチスレッド処理方法。
【請求項9】
当該サーバ装置は複数のCPUを有し、
前記複数のCPUのうち1のCPUである第1のCPUで前記第1のスレッドを実行し、
前記複数のCPUのうち他のCPUである第2のCPUで前記第2のスレッドを実行し、
前記第1のスレッド及び前記第2のスレッドは、並列処理される(S108、S203)、
請求項8記載のマルチスレッド処理方法。
【請求項10】
前記第1のCPU使用率及び前記第2のCPU使用率を求め(S401、S402)、
前記第1のCPU使用率が前記第2のCPU使用率よりも低い場合は前記第1のスレッドを割当て(S403、S405)、
前記第2のCPU使用率が前記第1のCPU使用率よりも低い場合は前記第2のスレッドを割当てる(S403、S404)、
請求項9記載のマルチスレッド処理方法。
【請求項11】
複数のクライアント通信機と接続するサーバ装置で実行可能なマルチスレッド処理プログラムであって、
前記クライアント通信機から接続要求信号及びデータを受信し(S102、S104)、
前記データを外部装置に送信する第1のスレッド及び前記データを前記外部装置に送信する第2のスレッドを起動し(S101、S200)、
前記接続要求信号に基づき、前記クライアント通信機から受信した前記データの送信を前記第1のスレッド及び前記第2のスレッドのいずれで行うかを割当てる(S103)、
マルチスレッド処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クライアント・サーバ型システムにおけるサーバ装置、マルチスレッド処理方法及び処理プログラムに関する。具体的には、主に自動車等の移動体に搭載された通信機と接続するサーバ装置、マルチスレッド処理方法及びマルチスレッド処理プログラムに関する。
【背景技術】
【0002】
近年、車車間通信や路車間通信のようなV2Xをはじめ、運転支援や自動運転制御を行う技術が注目されている。これに伴い、車両が通信機能を備えるようになり、車両が取得したデータをサーバ装置に送信し、サーバ装置で車両が取得したデータを管理、分析することが知られている。
【0003】
サーバ装置は、クライアント・サーバ型システムに用いられるサーバに相当し、車両が備える通信機能は、クライアント・サーバ型システムに用いられるクライアントに相当する。サーバ装置では、車両の通信機能とデータの橋渡しをするための通信管理アプリケーション(以下、通信アプリと略する)が用いられ、通信管理アプリは複数の処理を同時並行して処理できるようにマルチスレッドのプロセスが用いられている。
【0004】
特許文献1には、サーバがシステムリソースを空費することなく、クライアントの接続要求にスムーズに応答する方法が開示されている。サーバが許容するクライアント数、スレッドにクライアントを割当てる時の制限時間、スレッド生成するのに要する時間などから、プロセス中に生成しておくべき空スレッド数を算出し、空スレッドがサーバ内でクライアントの接続要求を待機した状態にする。これにより、クライアントからサーバに接続要求が来たとき、サーバはクライアントにスレッドを割当てることができる。全てのクライアント分のスレッドを常に用意しておく必要がなく、接続しているクライアントが少ない時はメモリを開放することができる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
ここで、本発明者は、以下の課題を見出した。
サーバ装置が外部装置(外部アプリケーションを含む)とデータの送受信を行う場合において、サーバ処理負荷の高いスレッドを1つのCPUで処理する際に遅延や無駄等のリスクが生じる。
一方、特許文献1に開示されている方法では、サーバ装置上で動作する通信管理アプリのようなクライアント側、外部装置側の双方からのデータを処理する必要があるため、1つのクライアントの場合であっても機能毎にスレッドを生成する必要がある。そのため、クライアント数が多くなると、スレッド数が膨大になる。このようにスレッド数が膨大になると、コンテキストスイッチが多発して通信の遅延やスループットの低下につながる。また、特許文献1において仮にスレッド数をクライアント数に依存しない処理方法に変更しても、1つのCPUで処理負荷の高いスレッドを効率的に処理することができない課題が残る。
【0007】
そこで、本発明は、サーバのCPUリソースを効率的に使用し、サーバ全体の処理時間を短縮化することによって、通信の低遅延化を実現することを目的とする。
【課題を解決するための手段】
【0008】
本開示のサーバ装置は、
複数のクライアント通信機(10)と接続するサーバ装置(200)であって、
前記クライアント通信機から接続要求信号及びデータを受信する受信部(101)と、
前記データを外部装置(203)に送信する第1のスレッドを実行する第1の送信部(201)と、
前記データを前記外部装置に送信する第2のスレッドを実行する第2の送信部(202)と、
前記接続要求信号に基づき、前記クライアント通信機から受信した前記データの送信を前記第1のスレッド及び前記第2のスレッドのいずれで行うかを割当てるスレッド割当部(102)と、を有する。
【0009】
なお、特許請求の範囲、及び本項に記載した発明の構成要件に付した括弧内の番号は、本発明と後述の実施形態との対応関係を示すものであり、本発明を限定する趣旨ではない。
【発明の効果】
【0010】
上述のような構成により、本開示のサーバ装置は、サーバ装置のCPUリソースを効率的に使用でき、サーバ全体の処理時間を短縮化することによって、通信の低遅延化を実現できる。
【図面の簡単な説明】
【0011】
【
図1】各実施形態のサーバ装置の構成例を示すブロック図
【
図2】各実施形態のサーバ装置の受信・送信処理の動作を示すフローチャート
【
図3】各実施形態のサーバ装置のマルチスレッド処理の動作を示す説明図
【
図4】実施形態1のサーバ装置の構成例を示すブロック図
【
図5】実施形態1のサーバ装置のマルチスレッド処理の動作を示すフローチャート
【
図6】実施形態1のサーバ装置のマルチスレッド処理の動作を示す説明図
【
図7】実施形態2のサーバ装置の構成例を示すブロック図
【
図8】実施形態2のサーバ装置のマルチスレッド処理の動作を示すフローチャート
【
図9】実施形態2のサーバ装置の送信スレッド割当ての動作を示すフローチャート
【
図10】実施形態2のサーバ装置の送信スレッド割当てのさらなる動作を示すフローチャート
【
図11】各実施形態のサーバ装置の構成例を示すブロック図
【発明を実施するための形態】
【0012】
以下、本発明の実施形態について、図面を参照して説明する。
【0013】
なお、本発明とは、特許請求の範囲又は課題を解決するための手段の項に記載された発明を意味するものであり、以下の実施形態に限定されるものではない。また、少なくともかぎ括弧内の語句は、特許請求の範囲又は課題を解決するための手段の項に記載された語句を意味し、同じく以下の実施形態に限定されるものではない。
【0014】
特許請求の範囲の従属項に記載の構成及び方法は、特許請求の範囲の独立項に記載の発明において任意の構成及び方法である。従属項に記載の構成及び方法に対応する実施形態の構成及び方法、並びに特許請求の範囲に記載がなく実施形態のみに記載の構成及び方法は、本発明において任意の構成及び方法である。特許請求の範囲の記載が実施形態の記載よりも広い場合における実施形態に記載の構成及び方法も、本発明の構成及び方法の例示であるという意味で、本発明において任意の構成及び方法である。いずれの場合も、特許請求の範囲の独立項に記載することで、本発明の必須の構成及び方法となる。
【0015】
実施形態に記載した効果は、本発明の例示としての実施形態の構成を有する場合の効果であり、必ずしも本発明が有する効果ではない。
【0016】
複数の実施形態がある場合、各実施形態に開示の構成は各実施形態のみで閉じるものではなく、実施形態をまたいで組み合わせることが可能である。例えば一の実施形態に開示の構成を、他の実施形態に組み合わせてもよい。また、複数の実施形態それぞれに開示の構成を集めて組み合わせてもよい。
【0017】
発明が解決しようとする課題に記載した課題は公知の課題ではなく、本発明者が独自に知見したものであり、本発明の構成及び方法と共に発明の進歩性を肯定する事実である。
【0018】
1.各実施形態の前提となる構成
(1)通信管理アプリを実行するサーバ装置
図1は、各実施形態のサーバ装置の構成を示すブロック図である。サーバ装置は、複数の「クライアント通信機」10と「接続」されている。サーバ装置は、クライアント・サーバ型システムのサーバに相当し、クライアント通信機10はクライアント・サーバ型システムのクライアントに相当する。サーバ装置において、クライアント及び/又は外部装置へのデータの入出力を管理するため、通信管理アプリが用いられている。
本実施形態においては、3つのクライアント通信機10が図示されているが、本発明はこれに限定されず、少なくとも2つ以上のクライアント通信機10を備えればよい。本実施形態において、クライアント通信機10は車両等の「移動体」に「搭載」されている。クライアント通信機10は、搭載された移動体に関する情報をサーバ装置へ送信する機能を備える。
ここで、
「クライアント通信機」とは、クライアント/サーバ型システムに用いられるクライアントに相当するものであり、かつ通信機能を備えるものであればよい。
「接続」とは、データのやり取りが可能な状態をいい、異なるハードウェアが有線又は無線の通信ネットワークを介して接続されている場合はもちろん、同一のハードウェア上で実現された仮想マシン同士が仮想的に接続されている場合も含む。
「移動体」とは、移動可能な物体をいい、移動速度は任意である。また移動体が停止している場合も当然含む。例えば、自動車、自動二輪車、自転車、歩行者、船舶、航空機、及びこれらに搭載される物を含み、またこれらに限らない。
「搭載」されている、とは、移動体に直接固定されている場合の他、移動体に固定されていないが移動体と共に移動する場合も含む。例えば、移動体に乗った人が所持している場合、移動体に載置された積荷に搭載されている場合、が挙げられる。
【0019】
サーバ装置は、さらに「外部装置」17と接続されている。
ここで、「外部装置」とは、当該サーバ装置とはソフトウェアまたはハードウェアで区別できる装置であれば足り、当該サーバ装置と物理的に異なる装置である必要は必ずしもない。「外部装置」の一例として、データを蓄積、解析するためのストレージ装置、画像を分析し、分析結果に基づく処理を支援するクラウドアプリ(すなわち、クラウド上で提供されるアプリケーション)等が挙げられる。
【0020】
サーバ装置の一例として、例えばクラウド上の仮想サーバやクライアント通信機10の外部に設けられた物理的なサーバが挙げられる。サーバ装置は、通信管理アプリによって、クライアント通信機10及び外部装置17とデータの送受信を行う。サーバ装置は、クライアント通信機10から送信されたデータを受信し、受信したデータをキュー(図示せず)に保存する受信部11と、受信部11のキューに保存されているデータを取り出し、外部装置17へデータを送信する送信部12と、外部装置17から送信されたデータを受信し、受信したデータをキュー(図示せず)に保存する受信部14と、受信部14のキューに保存されているデータを取り出し、クライアント通信機10へデータを送信する送信部13と、受信部11、送信部12、送信部13、受信部14の各処理を実行する「複数のCPU」18を備える。複数のCPU18のうち、個別のCPUに関しては、第1・・・第NのCPU1~N(Nは2以上の整数)で示される。
クライアント通信機10、サーバ装置及び外部装置17は、例えばWAN(Wide Area Network)やLAN(Local Area Network)で送受信ソケット15、16を介して接続される。一般的には、クライアント通信機10とサーバ装置の間はWANで接続され、サーバ装置と外部装置17が同じクラウド上にある場合は、サーバと外部装置の間がLANで接続される。送受信ソケット15、16は任意で設けることができる。
ここで、「複数のCPU」は、パッケージ単位、コア単位、又は仮想CPU単位で区別できれば足りる。例えば、マルチコアCPU等が挙げられる。
【0021】
クライアント通信機10、サーバ装置及び外部装置17間で送受信されるデータは、例えば、静止画像や動画像等の画像である。特に、クライアント通信機10の内外に備え付けられたカメラ等の撮像装置が撮影した任意の画像であればよく、例えばクライアント通信機10の周囲の静止画像、動画像が挙げられる。また、データの他の例として、各クライアント通信機10から送信されるQSEvやSEvのログ情報等であってもよい。
【0022】
(2)サーバ装置の送受信フロー
図2は、各実施形態の受信部11及び送信部12の処理フローを示すフローチャートである。受信部11は複数のCPU18のうち一つのCPUで受信スレッドを実行し、送信部12は複数のCPU18のうちの他の一つのCPUで送信スレッドを実行する。
(受信スレッドの処理フロー)
受信部11は、クライアント通信機10からデータを受信する(S10)。データは送受信ソケット15を介して受信する。クライアント通信機10から受信したデータが暗号化されていた場合、データの復号を行う(S11)。データ中のパケットに付与されたヘッダ情報を解析し(S12)、データを送付したクライアント通信機10の特定、データ種別の特定等を実行する。その後、受信部11内のデータキューにデータを格納する(S13)。その後、データキューにデータが格納された旨を送信部12へ通知する(S14)。
ここで、データキューとは、受信部と送信部が共有している領域であり、例えば、サーバ装置内の一時保存メモリを用いることができる。
【0023】
(送信スレッドの処理フロー)
送信部12は、データキューにデータが格納された旨の通知を受信する(S21)。その後、受信部11のデータキューからデータを取り出し(S22)、パケットに付与されたヘッダ情報を解析し(S23)、必要に応じて、バイトオーダーの変換(S23)や冗長化されたデータの復号(S25)を行う。クライアント通信機10から送付されたデータが受信部11で受信された順序となるようにパケットを並べ替え(S26)、外部装置17へデータを送信する(S27)。その後、通知を受領するステップ以降を繰り返す。
【0024】
(3)マルチスレッド処理
図3は、各実施形態の通信管理アプリの動作、すなわちマルチスレッドのプロセスを説明する図である。
図3(a)はスレッドA~スレッドJで示された複数の処理を実行する説明図である。本実施形態の通信管理アプリは、複数の処理を同時並行して実行するマルチスレッドのプロセスを実行する。本実施形態において、処理の1つ1つの単位をスレッドと定義する。スレッドA(すなわち、処理Aを実行するスレッド)は、例えば、クライアント通信機10からデータを受信する処理に相当し、サーバ装置の受信部11において実行される。スレッドJは、例えば、サーバ装置から外部装置17へデータを送信する処理に相当し、サーバ装置の送信部12において実行される。スレッドA及びJ以外のスレッドB、C等は、サーバ装置内で実行される任意の処理に相当し、例えば受信部14、送信部13及び図示されていない任意の実行部においてそれぞれ実行される。
【0025】
図3(b)は、処理を同時並行で実行する際の、CPUとスレッドの関係を示す図である。本実施形態では4つのCPUを有するサーバ装置を示しているが、CPUの数は4つに限定されず、2つ以上の任意の数であればよい。
図3(b)において、第1のCPU1がスレッドJを実行し、第2のCPU2がスレッドAを実行し、第3のCPU3がスレッドBを実行し、第4のCPU4がスレッドCを実行する。本実施形態において、スレッドA~Jのスレッド数に対して、CPUの数は4つと限られているので、サーバ装置で動作するOSのスケジューラが実行可能状態となったスレッドをCPUに割当てし、各CPUが処理を実行する。図示していないが、例えば第3のCPU3がスレッドBを実行した後、次のスレッドBを実行するまでの間に、実行可能状態となったスレッドDを実行してもよい。また、CPUの割当てはスレッド毎の固定ではなく、各スレッドの処理内容、処理時間に応じて、適切なCPUを割当てることができる。
【0026】
本実施形態におけるサーバ装置は、映像伝送や車両遠隔操作に使用するため、クライアント通信機10からサーバに送付するデータの通信量が大きい。そのため、受信部11や送信部12の処理負荷が高まる傾向が強く、特に送信部12で実行される送信処理(スレッドJ)の負荷が最も高くなる。
図3(b)において、送信処理を行うスレッドJのCPU使用率が最も高くなるため、スレッドJが「高負荷処理を行うスレッド」に相当する。
そのため、以下の実施形態1及び2において、高負荷処理を行うスレッドに対して、負荷を分散させるために複数の高負荷処理を行うスレッドを設け、一つのクライアントに対して複数の高負荷処理を行うスレッドのうちの一つの高負荷処理を行うスレッドを割当てる態様について説明する。以下、実施形態1の例として、サーバ装置100、実施形態2の例としてサーバ装置200について説明する。
【0027】
2.実施形態1
(1)サーバ装置100の構成
図4は、本実施形態のサーバ装置100の構成を示すブロック図である。
図1に開示された構成と同一の構成・機能については同一の参照番号を使用する。本実施形態のサーバ装置100は、複数のクライアント通信機10から「接続要求信号」及びデータを受信する受信部101と、「第1の高負荷処理を行う第1のスレッド」を実行する第1の実行部103と、「第2の高負荷処理を行う第2のスレッド」を実行する第2の実行部104と、クライアント通信機10から受信した接続要求信号に基づき、クライアント通信機10から受信したデータの処理を第1のスレッド及び第2のスレッドのいずれで行うかを割当てるスレッド割当部102と、を有する。スレッド割当部102は、クライアント通信機10が新規にサーバ装置100に接続される毎に、新規に接続されたクライアント通信機10から受信したデータの処理を第1のスレッド及び第2のスレッドのいずれで行うか割当てる。この割当ては、サーバ装置100に接続される全てのクライアント通信機10に対して実行される。また、この割当ては以下において説明する所定のルールに基づいて実行されてもよい。
本実施形態1のサーバ装置100と
図1に示されたサーバ装置との主な相違点は、少なくとも2つの実行部を設けていること、スレッド割当部102を有することである。
なお、高負荷処理を行うスレッドを実行する実行部の数は3つ以上であってもよい。その場合、第1の実行部及び第2の実行部の「第1」、「第2」は、3つ以上ある実行部のうち2つに着目していることを意味する。以下の実施形態においても同様である。
ここで、
「高負荷処理を行うスレッド」とは、サーバ装置の処理負荷が高くなるタスクを実行するための任意のスレッドであればよい。例えば、サーバ装置からクラウドアプリやストレージ等の外部装置に対して、データを送信する送信スレッドや、クライアント通信機から受信したデータをサーバ装置内で解析処理や加工処理するスレッド等が挙げられる。
「接続要求信号」とは、例えば、車両においてキーをオンにし、車両内の通信機が起動した後に、サーバ装置へ接続することを要求するために送信される信号である。
【0028】
(2)マルチスレッド処理方法
図5は、本実施形態のサーバ装置のマルチスレッド処理の動作を示すフローチャートである。
図5に開示された動作は、
図4に開示されたサーバ装置100で実行するマルチスレッド処理方法、又はサーバ装置100において実行可能なマルチスレッド処理プログラムの処理手順を示すものである。なお、これらの処理は、
図5に示した順序には限定されない。すなわち、あるステップでその前段のステップの結果を利用する関係にある等の制約がない限り、順序を入れ替えてもよい。この点は、本願のフローチャートを記載した他の図においても同様である。
【0029】
(初期動作)
サーバ装置100において、第1の高負荷処理を行う第1のスレッド及び第2の高負荷処理を行う第2のスレッドを起動する(S101)。第1のスレッドは、第1の実行部103で実行され、第2のスレッドは、第2の実行部104で実行される。
新規のクライアント通信機10がサーバ装置100に接続されると、クライアント通信機10が接続要求信号をサーバ装置100へ送信する(S102)。クライアント通信機10は、1~N個(Nは2以上の任意の整数)あるため、全てのクライアント通信機10がサーバ装置へ接続する際に、接続要求信号を送信する。また、クライアント通信機10は、任意のタイミングでサーバ装置100にデータを送信する(S104)。サーバ装置100の受信部101において、クライアント通信機10から送信された接続要求信号及びデータを受信する。
受信部101が新規のクライアント通信機10から接続要求信号を受信すると、スレッド割当部102がデータを処理するためのスレッドを割当てる(S103)。
図3のサーバ装置100の構成において説明した通り、「スレッドを割当てる」とは、新規のクライアント通信機10の接続要求信号に基づき、新規のクライアント通信機10から受信したデータの処理を第1のスレッド及び第2のスレッドのいずれで行うかを割当てる処理である。この割当ては以下において説明する所定のルールに基づいて実行されてもよい。
上記の通り、一つのクライアント通信機10は、複数の高負荷処理を行うスレッドのうち、第1又は第2の高負荷処理を行うスレッドに割当て当てられる。言い換えると、一つの高負荷処理を行うスレッド(第1のスレッド又は第2のスレッド)は、任意の数のクライアント通信機10から受信したデータを処理する。
【0030】
(データ処理)
受信部101がクライアント通信機10からデータを受信した後、データ中のヘッダ情報からクライアント通信機10を特定することによって格納先のスレッドを判断する(S105)。第1のスレッドに格納すべきデータであると判断した場合、データを第1のスレッドに格納する(S106)。同様に、第2のスレッドに格納すべきデータであると判断した場合、データを第2のスレッドに格納する(S107)。前述のスレッドを割当てる(S103)ステップにおいて、各々のクライアント通信機10が第1又は第2のスレッドと紐づけられているため、受信部101においてデータを受信した後、当該データを送信したクライアント通信機10を特定することで、当該データの格納先のスレッドが第1のスレッドであるか、第2のスレッドであるかを判断できる。
第1のスレッドに格納されたデータは、第1の実行部103において所定の処理が実行され、第2のスレッドに格納されたデータは、第2の実行部104において所定の処理が実行される。オプションとして、第1のスレッド及び第2のスレッドは「並列処理される」(S108)。並列処理の定義及び効果については、下記において詳細に説明する。
ここで、「並列処理される」とは、一方のスレッドの少なくとも一部の処理が他方のスレッドの少なくとも一部の処理と同時並行で実行される場合の他、一方のスレッドの全ての処理が他方のスレッドの一部の処理と同時並行で実行される場合も含む。
【0031】
(3)所定の割当てルール
スレッド割当部102がデータを処理するためのスレッドを割当てる際に(S103)、所定の割当てルールによって割当てを実行してもよい。所定の割当てルールとは、割当て先のスレッドを決定するための予め設定された任意のルール(アルゴリズムを含む)であればよい。所定の割当てルールの一例は、(i)クライアント通信機10がサーバ装置100に接続された時のシステム全体のCPU使用率に応じて、割当て先の高負荷処理を行うスレッドを決定すること、(ii)クライアント通信機10がサーバ装置100に接続された順番に応じて、例えば奇数偶数等の順番に応じて、割当て先の高負荷処理を行うスレッドを決定すること、(iii)高負荷処理を行うスレッドに既に割当てされているクライアント通信機10の数を比較し、最も数が少ない高負荷処理を行うスレッドに対して、順次クライアント通信機10を割当てること、等が挙げられる。上記(i)のシステム全体のCPU使用率に応じた割当てについては、実施の形態2において詳細に説明する。
【0032】
(4)2つの高負荷処理スレッドを用いたマルチスレッド処理
図6は、本実施形態の処理を同時並行で実行する際の、CPUとスレッドの関係を示す図である。
図3に開示された構成との相違点は、高負荷処理を行うスレッドを2つ以上設けること(
図6(a)のスレッドJ1、J2)、及び高負荷処理を行う2つのスレッドを並列処理すること(
図6(b)のスレッドJ1、J2)である。
図6(b)において、第1のCPU1がスレッドJ1を実行し、第3のCPU3がスレッドJ2を実行している。また第4のCPU4がスレッドB及びCを実行している点で、
図3(b)の構成と異なっている。
本実施形態において、第1の高負荷処理J1を行う第1のスレッドJ1が、第1のCPU1で実行され、第2の高負荷処理J2を行う第2のスレッドJ2が、第3のCPU3で実行され、第1のスレッドJ1と第2のスレッドJ2が並列処理される。例えば、スレッドJ1は第1、3、5のクライアント通信機10から受信したデータを処理し、スレッドJ2は第2、4、6のクライアント通信機10から受信したデータを処理する。
【0033】
図6(b)と
図3(b)を比較すると、第1のCPU1の大きな負荷が軽減されている。また第1のCPU1、第3のCPU3及び第4のCPU4を効率的に使用できる。第3のCPU3及び第4のCPU4の効率的な使用は、スレッドB又はスレッドCの処理時間がスレッドJの処理時間よりも短い場合に顕著になる。同様に第1のCPU1及び第3のCPU3の効率的な使用は、第1のCPU1が実行するスレッドJ1と第3のCPU3が処理するスレッドJ2を並列処理する場合に顕著になる。
【0034】
(5)小括
以上、本実施形態によれば、複数の高負荷処理を行うスレッドを使用し、一つのクライアント通信機10に対して、第1又は第2の高負荷処理を行うスレッドを割当てることにより、サーバ装置100のCPUリソースを効率的に使用し、通信の低遅延化、スループットの向上に寄与する。
【0035】
3.実施形態2
(1)サーバ装置200の構成
図7は、本実施形態のサーバ装置200の構成を示すブロック図である。
図1及び4に開示された構成と同一の構成・機能については同一の参照番号を使用する。本実施形態のサーバ装置200は、第1の実行部103及び第2の実行部104に代えて、所定のクライアント通信機10から受信したデータを外部装置203に送信する第1の送信部201と、前記所定のクライアント通信機10とは別の所定のクライアント通信機10から受信したデータを外部装置203に送信する第2の送信部202を有する。すなわち、実施形態2のサーバ装置200は、実施形態1の第1の高負荷処理及び前記第2の高負荷処理が外部装置203へのデータの送信である場合に相当し、高負荷処理を行うスレッドが送信スレッドである場合の構成例である。第1の送信部201は、複数のCPU106のうちの第1のCPU1で第1の送信スレッドを実行し、第2の送信部202は、複数のCPU106のうちの第2のCPU2で第2の送信スレッドを実行する。
本実施形態において、スレッド割当部102は、さらに複数のCPU106に接続されており、各CPUの使用率に関する情報を一定時間毎に受信する。また、受信部101は、第1の送信部201に対応するデータキュー1、第2の送信部202に対応するデータキュー2を備えてもよい。
また、データを外部装置203に送信するスレッドを実行する送信部を有するとともに、送信部は第1のCPU1でスレッドを実行し、第1のCPU1が所定の使用率を超える場合、第2のスレッドを起動して第2のCPU2で第2のスレッドを実行することにより第2の送信部202とするとともに、当該送信部を第1の送信部201としてもよい。
【0036】
(2)マルチスレッド処理方法
図8は、本実施形態のサーバ装置200のマルチスレッド処理の動作を示すフローチャートである。
図5と同一の方法・機能に関しては同一の参照番号を使用する。
【0037】
(初期動作)
サーバ装置200において、第1の送信スレッド及び第2の送信スレッドを起動する(S200)。第1の送信スレッドは、第1の送信部201で実行され、第2の送信スレッドは、第2の送信部202で実行される。
実施形態1と同様に、スレッド割当部102がデータを処理するためのスレッドを割当てる(S103)際に所定のルールによって割当てを実行してもよい。さらに、本実施形態では、クライアント通信機10がサーバ装置200に接続された時のシステム全体のCPU使用率に応じて、第1の送信スレッド又は第2の送信スレッドを割当てる。詳細については後述する。
【0038】
(データ処理)
受信部101がクライアント通信機10からデータを受信した後、データの送信元のクライアント通信機10を特定することによって格納先のスレッドを判断し(S105)、第1の送信スレッドに格納すべきデータと判断した場合、当該データを第1の送信スレッドに格納する(S201)。同様に、第2の送信スレッドに格納すべきデータであると判断した場合、当該データを第2の送信スレッドに格納する(S202)。また、オプションとして、第1の送信スレッド及び第2の送信スレッドに格納する前に、受信部101内に設けられたデータキュー1及びデータキュー2にデータを格納してもよい(S204、S205)。この場合、スレッド割当部102が第1の送信スレッドを割当てた場合はデータをデータキュー1に保存し、第1の送信部201は、データキュー1からデータを読出して外部装置203に送信する。同様に、スレッド割当部102が第2の送信スレッドを割当てた場合はデータをデータキュー2に保存し、第2の送信部202は、データキュー2からデータを読出して外部装置203に送信する。
オプションとして、第1の送信スレッド及び第2の送信スレッドは並列処理され、格納されていたそれぞれのデータを外部装置へ送信する(S203)。
【0039】
(3)CPU使用率に基づくスレッド割当てフロー
新規のクライアント通信機10がサーバ装置200に接続された時に、その時点のシステム全体のCPU使用率に応じて適切な送信スレッド(高負荷処理スレッド)を新規のクライアント通信機10に割当てる動作について、
図9及び
図10を用いて説明する。
図9は、スレッド割当部102で動作するスレッド割当てのメインルーチンを示すフロー図である。
スレッド割当部102が、サーバ装置200に新規に接続されたクライアント通信機10から送信された接続要求信号を受信部101を介して受信する(S301)。その後、送信スレッド割当て先を後述するサブルーチンから取得する(S302)。その後、S302で割当てられた送信スレッドを新規に接続されたクライアント通信機10に割当てる(S303)。その後、CPU負荷の平均値をクリアする(S304)。
このように、新規のクライアント通信機10がサーバ装置200に接続するたびに、スレッド割当のメインルーチンが実行される。
【0040】
図10はスレッド割当てのサブルーチンを示すフロー図である。スレッド割当部102が第1の送信スレッドを実行する第1のCPUの使用率と、第2の送信スレッドを実行する第2のCPUの使用率を取得する(S401)。その後、第1の送信スレッドのCPU負荷の平均値(U1)及び第2の送信スレッドのCPU負荷の平均値(U2)を算出する(S402)。平均値(U1)と平均値(U2)を比較し(S403)、平均値(U1)が大きい場合、すなわち、第1の送信スレッドを実行する第1のCPUの使用率のほうが高い場合、新規クライアント通信機10が接続された場合に第2の送信スレッドへ割当てることを決定する(S404)。平均値(U1)が平均値(U2)より小さい場合、すなわち、第2の送信スレッドを実行する第2のCPUの使用率のほうが高い場合、新規クライアント通信機10が接続された場合に第1のスレッドへ割当てることを決定する(S405)。割当て先が決定された後、最初のステップS401に戻る。
一例として、第1の送信スレッドに3台のクライアント通信機10が割当てられており、第1の送信スレッドを実行する第1のCPU負荷の平均値(U1)が50%であり、第2の送信スレッドに別の3台のクライアント通信機10が割当てられており、第2の送信スレッドを実行する第2のCPU負荷の平均値(U2)が30%である場合、新規に接続されるクライアント通信機10は、第2の送信スレッドに割当てられることをサブルーチンで決定する。
【0041】
(5)小括
以上、本実施形態によれば、複数の送信スレッドを使用し、一つのクライアント通信機10に対して、第1又は第2の送信スレッドを割当てることにより、サーバ装置200のCPUリソースを効率的に使用し、通信の低遅延化、スループットの向上に寄与する。
また、本実施形態によれば、送信スレッドを実行するCPUの使用率に応じて送信スレッドを割当てることにより、さらなるCPUリソースの効率化が実現できる。
【0042】
4.実施形態1のサーバ装置100及び実施形態2のサーバ装置200のその他の構成
図11に示す通り、サーバ装置100、200は、複数のCPU106と、メモリ300を備えてもよい。メモリ300は、サーバ装置100、200に前述のマルチスレッド処理を実行させる命令を保持し、複数のCPU106で実行する。
【0043】
本発明は下記の項目で記載されてもよい。
【0044】
項目1:
コンピューティング・システム(サーバ装置)(100、200)であって、
プロセッサ(CPU)(106)と、
前記プロセッサによって実行されると、前記コンピューティング・システムに以下のステップを実行させる命令を保存する少なくとも1つのメモリ(300)と、
を備え、前記命令は、
前記クライアント通信機から接続要求信号及びデータを受信するステップ(S102、S103)と、
第1の高負荷処理を行なう第1のスレッド及び第2の高負荷処理を行う第2のスレッドを起動するステップ(S100)と、
前記接続要求信号に基づき、前記クライアント通信機から受信した前記データの処理を前記第1のスレッド及び前記第2のスレッドのいずれで行うかを割当てるステップ(S103)と、
を備える、コンピューティング・システム。
項目2:
前記第1の高負荷処理及び前記第2の高負荷処理は、外部装置への前記データの送信である、項目1記載のコンピューティング・システム。
項目3:
当該サーバ装置は複数のCPUを有し、
前記複数のCPUのうち1のCPUである第1のCPUで前記第1のスレッドを実行するステップと、
前記複数のCPUのうち他のCPUである第2のCPUで前記第2のスレッドを実行するステップと、
前記第1のスレッド及び前記第2のスレッドは、並列処理されるステップ(S203)と、
をさらに含む、項目1又は2記載のコンピューティング・システム。
項目4:
前記第1のCPU使用率及び前記第2のCPU使用率を求めるステップ(S401、S402)と、
前記第1のCPU使用率が前記第2のCPU使用率よりも低い場合は前記第1のスレッドを割当てるステップ(S403、S405)と、
前記第2のCPU使用率が前記第1のCPU使用率よりも低い場合は前記第2のスレッドを割当てるステップ(S403、S404)と、
をさらに含む、項目1~3のいずれか一項に記載のコンピューティング・システム。
【0045】
5.総括
以上、本発明の各実施形態におけるサーバ装置等の特徴について説明した。
【0046】
各実施形態で使用した用語は例示であるので、同義の用語、あるいは同義の機能を含む用語に置き換えてもよい。
【0047】
実施形態の説明に用いたブロック図は、装置の構成を機能毎に分類及び整理したものである。それぞれの機能を示すブロックは、ハードウェア又はソフトウェアの任意の組み合わせで実現される。また、機能を示したものであることから、かかるブロック図は方法の発明、及び当該方法を実現するプログラムの発明の開示としても把握できるものである。
【0048】
各実施形態に記載した処理、フロー、及び方法として把握できる機能ブロック、については、一のステップでその前段の他のステップの結果を利用する関係にある等の制約がない限り、順序を入れ替えてもよい。
【0049】
各実施形態、及び特許請求の範囲で使用する、第1、第2、乃至、第N(Nは整数)、の用語は、同種の2以上の構成や方法を区別するために使用しており、順序や優劣を限定するものではない。
【0050】
各実施形態は、自動車等の移動体に搭載されるクライアント通信機に接続されるサーバ装置を前提としているが、本発明は、特許請求の範囲で特に限定する場合を除き、移動体以外の専用又は汎用のクライアント通信機に接続されるサーバ装置も含むものである。
【0051】
加えて、本発明は、各実施形態で説明した構成及び機能を有する専用のハードウェアで実現できるだけでなく、メモリやハードディスク等の記録媒体に記録した本発明を実現するためのプログラム、及びこれを実行可能な専用又は汎用CPU及びメモリ等を有する汎用のハードウェアとの組み合わせとしても実現できる。
【産業上の利用可能性】
【0052】
本発明のサーバ装置は、主として自動車等の移動体に搭載されたクライアント通信機が接続されるサーバ装置を対象としているが、移動体に搭載されないクライアント通信機が接続されるサーバ装置を対象としてもよい。
【符号の説明】
【0053】
10 クライアント通信機、11 受信部、12 送信部、13 送信部、14 受信部、15 送受信ソケット、16 送受信ソケット、17 外部装置、18 複数のCPU、100 サーバ装置、101 受信部、102 スレッド割当部、103 第1の実行部、104 第2の実行部、106 複数のCPU、200 サーバ装置、201 第1の送信部、202 第2の送信部、203 外部装置、300 メモリ