JP2015143998A - 電気通信ネットワークにおけるイベントを処理するための装置および方法 - Google Patents
電気通信ネットワークにおけるイベントを処理するための装置および方法 Download PDFInfo
- Publication number
- JP2015143998A JP2015143998A JP2015039240A JP2015039240A JP2015143998A JP 2015143998 A JP2015143998 A JP 2015143998A JP 2015039240 A JP2015039240 A JP 2015039240A JP 2015039240 A JP2015039240 A JP 2015039240A JP 2015143998 A JP2015143998 A JP 2015143998A
- Authority
- JP
- Japan
- Prior art keywords
- event
- queue
- task
- event queue
- resource adapter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Telephonic Communication Services (AREA)
Abstract
【課題】処理プラットフォーム内のイベントの処理を、リソース効率の良い方法で同期させるための方法および装置を提供する。【解決手段】アプリケーションセッションを取り扱うためのリソースアダプタ11は、1つ以上のアプリケーションセッションS1からSnを有している。イベントキュー17は、アプリケーションセッションS1からSnの特定の1つのために実行されるべき一群のイベントを格納している。スレッドプール19は、プロセッサ3が複数のタスクを並列に実行することを可能にするための1つ以上の処理スレッドt1からtNを有している。スレッドプール19はまた、スレッドt1からtNによって実行すべき複数のタスクを格納するタスクキュー21を有している。同期部23は、イベントキュー17内で待たされているイベントの1つだけが、自身にスケジュールされたタスクをタスクキュー21に有するように構成する。【選択図】図3
Description
本発明は電気通信ネットワーク内のイベントを処理するための装置および方法に関し、特に、電気通信処理プラットフォーム、例えばJava(登録商標)エンタプライズエディション(Java Enterprise Edition: JEE)におけるアプリケーションセッションと関連付けられたイベントの処理を同期させるための方法および装置に関する。
電気通信ネットワークには、通常の呼に追加機能を提供するための多くのアプリケーションおよびサービスが存在している。これらアプリケーションおよびサービスは、電気通信ネットワークに接続される別個のサーバで稼動するのが一般的である。これらサーバは通常、通信ネットワーク自体とは異なるプラットフォーム上で稼働する。
そのようなプラットフォームの1つはJEE(Java Enterprise Edition)プラットフォームであり、スタンダードJavaプラットフォームの拡張(development)である。JEEはJavaプログラム言語でサーバプログラムを作成するために広く用いられているプラットフォームである。JEEプラットフォームは、アプリケーションサーバ上で稼働するモジュラコンポーネントに主に基づいて、耐障害性があり、分散型で、多階層(multi-tier)のJavaソフトウェアを展開する機能を提供するライブラリを追加している点でスタンダードJavaプラットフォームと異なる。JEEプラットフォームの機能の1つは、並行して稼動する複数の処理スレッドを可能とすることであり、それによってタスク実行スループットが向上する。
JEEプラットフォームは多くのアプリケーションに向いているが、以下に説明するように一部の電気通信サービスには非実用的となりうる。
電気通信プロトコルの処理は、アプリケーションセッションに関連付けられた状態機械の使用を必要とするのが一般的である。これら状態機械に対しては、状態が壊れないよう、一度に1つのメッセージのみを受信する必要がある。JEEプラットフォームそれ自体は、ある特定のアプリケーションセッション上で一度に複数のメッセージを処理するための手段を提供しない。その一方で、JEEプラットフォームは通常、処理すべきメッセージと同じ数の並列スレッドを開始するであろう。
図1は、複数のプロセッサ3を有する典型的なJEEクラスタ1を示している。プロセッサ3は同一かつJEEクラスタ1の負荷を分担することができる。電気通信処理プラットフォームとして用いられる場合、個々のプロセッサ3は通常、いくつかのコンテナ、例えばEJB(Enterprise Java Beans)5、HTTPサーブレット7、セッション開始プロトコル(SIP)サーブレット9または、レガシシステムと通信するための他のリソースアダプタのような他の実行ユニット13を有するであろう。
図1に示すアーキテクチャは、スレッドプール19を有する。スレッドプール19は、プロセッサ3が複数のタスクを並列処理することを可能にするための1つ以上の処理スレッドt1からtNを有している。スレッドプール19はまた、スレッドt1からtNによって実行すべき一群のタスクを格納したタスクキュー21を有している。個々の処理スレッドt1からtNは、一度に1つのタスクを取り扱う。
上述の通り、JEEプラットフォームは、システム内に定義されたスレッドと同数のタスクを並列に処理しようとするように構成されている。これは、図1に示すようなJEEプラットフォームが電気通信アプリケーションおよびサービスを取り扱うために用いられている際に問題となり得る。それにより、複数のスレッドt1からtNが複数のアプリケーションセッションに関連付けられた複数のイベントを並列に処理する場合、セッション状態が無効となりうる。換言すれば、あるアプリケーションセッションにおける複数のイベントが、同一のセッション状態を同時に更新している。
イベント同期を確実にする1つの方法は、あるアプリケーションにおける複数のイベントが同一のセッション状態を同時に更新できなくするためのロックまたはセマフォを用いることである。そのため、1つのスレッドt1からtNがある特定のアプリケーションセッションに関連付けられたイベントを処理している際、他の全てのスレッドはその1つのスレッドが完了するまで待機しなければならない。これは、多くのスレッドt1からtNが待機させられ、システムリソースを最適に利用していないという点で不利であり、また通常はJEEプラットフォームの原則と相容れないものである。
イベント同期を確実にする別の方法は、複数のスレッドt1からtNの1つだけを各アプリケーションセッションに割り当てることである。そのようにすることで、各アプリケーションセッションはそのイベントを取り扱うための専用のスレッドを持つ。しかし、そのような解決方法は上述したスレッドプール機構の問題を有し、そのため、(スレッドを含む)全てのリソースが管理されねばならないという重要なJEEプラットフォームの原則に違反する。この解決方法はまた、必要数よりもずっと多くのスレッドt1からtNを用いるという問題を有しており、リソース効率が良くない。
以上のことから、リソース効率を妥協せずにイベント同期を実施することが困難であることが理解されるであろう。
本発明の目的は、電気通信ネットワークで用いるための処理プラットフォーム内のイベントの処理を、リソース効率の良い方法で同期させるための方法および装置を提供することである。
本発明の第1の見地によれば、電気通信処理プラットフォーム内で複数のアプリケーションセッションに関連付けられた複数のイベントの処理を同期させるための方法であって、前記電気通信処理プラットフォームは複数のタスクを並列に取り扱うための複数の処理スレッドを有し、前記複数のタスクはタスクキューに格納される。前記方法は、1つ以上のイベントをある特定のアプリケーションセッションに関連付けられたイベントキューに格納するステップと、前記タスクキュー内のあるタスクを、特定のアプリケーションセッションの前記イベントキュー内のただ1つのイベントに割り当てるステップとを有する。
本発明は、ある特定のアプリケーションセッションのあるイベントキュー内のただ1つのイベントが、割り当てられたタスクを有するので、複数のイベントが同時に取り扱われることを回避できるという利点を有する。本発明はまた、既存のスレッドプール自体がタスクキューからの複数のタスクを取り扱う方法を変更する必要が無いという利点も有する。
あるイベントを前記イベントキューに格納するステップは、前記イベントが前記イベントキューの最初のイベントかどうかを判定するステップと、もしそうであれば、前記タスクキュー内のあるタスクに、その特定のイベントを割り当てるステップとを有してよい。
前記イベントキューから処理済みのイベントを除去するステップは、前記イベントキューが空かどうかを判定するステップと、もしそうでなければ、前記タスクキュー内のあるタスクを、前記イベントキュー内の別のイベントに割り当てるステップを有してよい。タスクを割り当てる前記ステップは、タスクを前記イベントキュー内の次のイベントに割り当てるステップを有してよい。
イベントキューにイベントを格納するステップおよび前記イベントが前記イベントキュー内の最初のイベントかどうかを判定するステップは、分割できない1つの動作として実行されてよい。これは、競合状態を回避するという利点がある。
イベントキューからイベントを除去するステップおよび前記イベントキューが空かどうかを判定するステップは、分割できない1つの動作として実行されてよい。これもまた、競合状態を回避するという利点がある。
本発明の一見地によれば、不可分の動作を実行するためのロックが提供されてもよい。あるいは、不可分の動作を実行するためにアトミックカウンタが用いられてもよい。アトミックカウンタは、格納するステップまたは除去するステップのそれぞれにおいて増加または減少される計数値を有し、前記計数値は前記イベントキューが空かどうか、またはあるイベントが前記イベントキューの最初のイベントかどうかを示す。
前記方法は、JEE(Java Enterprise Edition)処理プラットフォームを有する電気通信処理プラットフォームで実行されてよい。
本発明の別の見地によれば、タスクキューに格納されている複数のタスクを並列に処理するための複数の処理スレッドを有する電気通信処理プラットフォームで用いるためのリソースアダプタが提供される。リソースアダプタは1つ以上のイベントキューを有する。各イベントキューはあるアプリケーションセッションに関連付けられるとともに、対応するアプリケーションセッションに関連付けられた1つ以上のイベントを格納するように構成される。前記リソースアダプタは、あるイベントキュー内の複数のイベントの処理を同期させるための同期手段を有し、前記同期手段は前記タスクキュー内のあるタスクをあるイベントキュー内のただ1つのイベントに割り当てるように構成される。
本発明の別の見地によれば、本発明に係るリソースアダプタを有するJEEクラスタまたは、本発明に係る方法を実行するように構成されたJEEクラスタが提供される。
本発明は、不必要にスレットをブロックすることなく、また、可能な限り多くの(異なるアプリケーションセッションからの)イベントを同時に処理することにより、複数のキューからの複数のイベントを取り扱うためにスレッドプールを効率的に用いることができるという利点を有する。本発明では、デッドロックおよびライブロックも生じない。
本発明のより良い理解のため、また本発明がどのようにして実行されうるかをより明確に示すため、以下では例証として添付図面を参照する。
以下において、本発明はJEEプラットフォームに関して説明される。しかしながら、スレッドプールとの組み合わせにより、すなわち、イベント処理を用いる任意のセッションフレームワークにより、複数のイベントおよびセッションの処理を取り扱う、他の型式のプラットフォームに対しても、本発明は適用可能であることが理解されよう。さらに、本発明を電気通信環境に関して説明するが、本発明は同様の問題を有する他のアプリケーションに対しても適用可能である。
本発明によれば、イベント同期は、複数のアプリケーションセッションを取り扱うように特に構成されたリソースアダプタを設けるとともに、ある特定のアプリケーションセッションに関連付けられたあるイベントキューにイベントを待ち行列化させ、そのイベントキューからのあるイベントを取り扱うために、一度にただ1つのタスクだけをスケジュールすることによって達成される。例えば複数のイベントはFIFOキュー内で待ち行列化されてよく、またそのイベントキュー内の最初のイベントを取り扱うために一度にただ1つだけのタスクをスケジュールする。
図2は、複数のプロセッサ3を有する典型的なJEEクラスタ1を示している。個々のプロセッサ3は通常、いくつかのコンテナ、例えばEJB(Enterprise Java Beans)5、HTTPサーブレット7、セッション開始プロトコル(SIP)サーブレット9または、レガシシステムと通信するための他のリソースアダプタのような他の実行ユニット13を有する。図2のアーキテクチャはまた、複数のアプリケーションセッションを取り扱うために設けられたセッションリソースアダプタ11を有するものとして図示されている。
リソースアダプタ11は、1つ以上のアプリケーションセッションS1からSnを有している。アプリケーションセッションS1からSnはおのおの、セッション状態15およびイベントキュー17を有しており、イベントキュー17は、アプリケーションセッションS1からSnの特定の1つのために実行されるべき複数のイベントのリストを格納している。一例として、”アプリケーションセッション”は、電気通信システムにおいて新たな呼が開始されている際に生成されうる。そのため、アプリケーションセッションは開始されている呼に関連付けられたサービスの形式であってよく、例えば発呼者へのお知らせを再生するためのサービスの形式であってよい。また、あくまで例示として、”イベント”は、呼の最中に発生する複数のイベントに関連付けられた用語であり、例えば被呼者による呼への応答、被呼者による自身の電話機への情報入力などである。なお、これらは何をセッションやイベントと見なすことができるかの単なる例示であり、本発明は処理可能なアプリケーションセッションまたはイベントのいかなる形式も包含し、電気通信、SIPまたはウェブベースのセッションおよびイベントを含むことを意図しているることに留意されたい。
リソースアダプタ11は、スレッドプール19を用いる。スレッドプール19はリソースアダプタ11内に設けられてもよいし、システム内の他の複数の構成要素と共用されてもよい。スレッドプール19は、複数のプロセッサ3が複数のタスクを並列に実行可能なように、1つ以上のスレッドt1からtNを有している。スレッドプール19はまた、スレッドt1からtNによって実行すべき一連のタスクを格納したタスクキュー21を有している。処理スレッドt1からtNのおのおのは、一度に1つのタスクを取り扱う。典型的な電気通信アプリケーションにおいて、スレッドt1からtNの数は、アプリケーションセッションS1からSnの数よりもずっと少ないのが一般的であることに留意されたい。
上述の通り、JEEプラットフォームは、システム内に定義されたスレッドと同数のタスクを並列に実行しようとするように構成されている。これは、図2に示すようなJEEプラットフォームが電気通信アプリケーションおよびサービスを取り扱うために用いられている際に問題となり得る。なぜなら、複数のスレッドt1からtNがある特定のアプリケーションセッションS1からSnからの複数のイベントを並列に処理する場合、セッション状態が無効となりうるからである。換言すれば、あるアプリケーションセッションにおける複数のイベントが、同一のセッション状態を同時に更新している。
図1に関して上述したように、イベント同期を確実にするための1つの方法は、ある特定のアプリケーションセッションS1からSnのイベントキュー17上の相互排除を生成するためのロックまたはセマフォを用いることかもしれない。そうすると、1つのスレッドt1からtNがある特定のアプリケーションセッションSxのイベントキュー17(すなわち、次のイベントを取り扱うイベントキュー)にアクセスしている際、他の全てのスレッドはその1つのスレッドが完了するまで待機しなければならない。これは、多くのスレッドt1からtNが待機させられ、システムリソースを最適に利用していないという点で不利であり、またJEEプラットフォームの原則と相容れないものである。
これも上述したように、イベント同期を確実にする別の方法は、複数のスレッドt1からtNの1つだけを各アプリケーションセッションS1からSnに割り当てることかもしれない。そうすると、各アプリケーションセッションS1からSnは自身のイベントキューからの複数のイベントを取り扱う専用のスレッドを持つ。しかし、そのような解決方法は上述したスレッドプール機構の問題を有し、そのため、(スレッドを含む)全てのリソースが管理されねばならないという重要なJEEプラットフォームの原則に違反する。この解決方法はまた、必要数よりもずっと多くのスレッドt1からtNを用いるという問題を有しており、リソース効率が良くない。
図3は、本発明の実施形態とともに用いるためのアーキテクチャを示している。図2示したように、JEEプラットフォームは複数のプロセッサ3を有するJEEクラスタ1を備えている。必須ではないが、複数のプロセッサ3は同一であって良く、また複数のプロセッサ3はJEEクラスタ1の負荷を分担することができる。あるプロセッサ3は1つ以上のコンテナ、例えばEJB(Enterprise Java Beans)5、HTTPサーブレット7、セッション開始プロトコル(SIP)サーブレット9または、レガシシステムと通信するための他のリソースアダプタのような他の実行ユニット13を有してよい。図2に示すように、プロセッサはセッションリソースアダプタ11をさらに有してよい。
図3に示すアーキテクチャにおいて、アプリケーションセッションを取り扱うためのリソースアダプタ11は、1つ以上のアプリケーションセッションS1からSnを有している。アプリケーションセッションS1からSnはおのおの、セッション状態15およびイベントキュー17を有しており、イベントキュー17は、アプリケーションセッションS1からSnの特定の1つのために実行されるべき一群のイベントを格納している。
セッション状態15およびイベントキュー17はメモリ内に格納される。一実施形態によればセッション状態は、そのアプリケーションセッションが開始された(また、通常は関連付けられた通信セッションが存在する)プロセッサ上のメモリ内に保持されてよい。この形式のプロセッサアフィニティを用いることにより、(ローカルネットワークを通じて)プロセッサ間でイベントを不必要にルーティングする必要が無いという利点がある。さらに、セッション状態をクラスタ内で分散する必要が無く、セッション状態が存在するプロセッサがクラッシュすれば自動的に存在しなくなるであろう。本発明において、セッション状態およびイベントキューの保存場所に制限はない。
図3に示す実施形態において、リソースアダプタ11はさらに、スレッドプール19を有している。スレッドプール19は、プロセッサ3が複数のタスクを並列に実行することを可能にするための1つ以上の処理スレッドt1からtNを有している。スレッドプール19はまた、スレッドt1からtNによって実行すべき複数のタスクを格納するタスクキュー21を有している。個々の処理スレッドt1からtNは、一度に1つのタスクを取り扱う。プロセッサは任意の数のアプリケーションセッションS1からSnと、任意の数のスレッドt1からtNを有してよい。スレッドプール19はリソースアダプタ11に専用であっても、プロセッサ3上の他の構成要素と共用されてもよいことに留意されたい。また、図3においてスレッドプール19はリソースアダプタ11の一部として示しているが、スレッドプール19はシステム内のいかなる場所に存在してもよく、その場合リソースアダプタ11はどこかに存在するスレッドプール19の利用を共用することに留意されたい。
本発明によれば、リソースアダプタ11はスレッドプールからの複数のスレッドt1からtNが複数のアプリケーションセッションS1からSnにおける複数のイベントをどのように取り扱うかを制御するための同期部23を有する。別の実施形態において、各アプリケーションセッションは、図7および図8に関して後述するように、競合状態を回避するための手段25を有するか、例えばアトミックカウンタのようなカウンタ25を用いて、所定の複数のステップが不可分な方法で実行されることを可能にするための手段を有してよい。
図2に関して上述したように、図3の同期部23が無いと、JEEプラットフォームはスレッドプール19内の処理スレッドt1からtNを制御することができず、スレッドプール19が、スレッドt1からtNのうち利用できるものを最大限使用してアプリケーションセッションS1からSnの複数のイベントキューを空にしようとするかもしれず、その結果、ある特定のアプリケーションセッションのイベントキュー17から複数のイベントを取り扱う危険を冒すかもしれない。
しかし、本発明による同期部23は、関連付けられたアプリケーションセッションのイベントキュー17内の各イベントについてタスクがスケジュールされないように構成されている。その代わりに、同期部23はあるアプリケーションセッションS1からSnのイベントキュー17からのただ1つのイベントだけが、割り当てられたタスクを有するように構成されている。例えば、あるイベントキュー17に複数のイベントがファスートインファストアウト(FIFO)キュー形式で格納されている場合、同期部23は、イベントキュー17内の最初のイベントだけが、スレッドプール19に関連付けられたタスクキュー21内にスケジュールされたタスクを有するようにリソースアダプタ11の動作を制御するように構成される。
図4は、本発明の実施形態によって実行されるステップを示している。ステップ401において、あるアプリケーションセッションに関連付けられているあるイベントキューに、1つ以上のイベントが格納される。ステップ402に示すように、タスクキュー内のタスクは、ある特定のアプリケーションセッションのイベントキュー内のただ1つのイベントに割り当てられている。これをどのようにして実行しうるかについての例を以下に説明する。
あるイベントキューから1つのイベントだけが割り当てられたタスクを有することを同期部23が保証するのは主に2通りの場合がある。その1つの場合は、あるイベントがイベントキューに追加されている場合、すなわち、イベントキューに格納もしくは挿入されている場合に関する。もう一つの場合は、あるイベントがイベントキューから除去されている場合、すなわち、イベントキューからのあるイベントがスレッドによって処理された場合に関する。
図5は、あるイベントをイベントキューに挿入する際に実行されるステップを示している。ステップ501で、ある特定のアプリケーションセッションのイベントキュー内に新たなイベントを挿入すべきであることが決定される。同期部23は、ステップ503でまずそのイベントをイベントキューに格納するように構成される。続いて同期部23はステップ505で、挿入されたイベントが、イベントキュー内の最初のイベントかどうかを判別するように構成される。もしそうでなければ、同期部23はその特定のイベントに対してタスクキュー内のタスクをスケジュールしない。しかし、ステップ505で、そのイベントがキュー内の最初のイベントであると判別された場合、同期部23はステップ507で、タスクキュー内のタスクをそのイベントに割り当てる。このように、あるイベントキュー内の最初のイベントだけが、タスクキュー内に割り当てられたタスクを有することが理解されるであろう。
後述するように、イベントをキューに挿入または格納するステップ(ステップ503)および、そのイベントがキュー内の最初のイベントかどうかを判別するステップ(ステップ505)は、不可分の動作であることが好ましい。換言すれば、これらステップは、その実行についてシステム内のいかなる他の処理スレッドにも影響を受けないような方法で実行される。
図6は、あるイベントキューからのあるイベントが取り扱われる際に実行されるステップおよび、引き続くステップを示している。図5に関して上述したように、イベントキュー内には1つ以上のイベントが挿入されている。ステップ601で、タスクキュー内に割り当てられているタスクを有するイベント、すなわちイベントキュー内の最初のイベントが、スレッドによって処理される。そのイベントは、処理された後にイベントキューから取り除かれる(ステップ603)。そして、同期部23はステップ605で、イベントキューが空かどうか判別する。ステップ605でイベントキューが空でないと判別されれば、同期部23はステップ607でそのイベントキュー内の別のイベント、例えば次のイベントに対して新たなタスクをスケジュールするように構成される。図6に示したプロセスは、ステップ605においてイベントキュー内にイベントが存在しないと判別され、(タスクをスケジュールするイベントがイベントキューに残っていないため)新たなタスクをスケジュールすることなく処理が終了するまで、ステップ601においてイベントキュー内の最初のイベントを処理するスレッドと別のスレッド(または同一のスレッド)によって継続される。
ここまでの説明から、特定のイベントキューからの2番目のイベントは、最初のイベントが完全に処理された後にだけ処理されうることが理解される。特に、2番目のイベントは、最初のイベントがそのキューから除去された後(2番目のイベントが最初にイベントになってから)にだけ取り扱うことができる。所望の機能を実現できるよう、あるイベントは処理された後でイベントキューから除去される。
後述するように、イベントをイベントキューから除去するステップ(ステップ603)および、そのイベントが空かどうかを判別するステップ(ステップ605)は、不可分の動作であることが好ましい。換言すれば、これらステップは、システム内のいかなる他の処理スレッドにも影響を受けないような方法で実行される。
同期部23が構成される方法は、通常は同一である、スレッドによって実行されるタスクと、イベントを取り扱うルーチンとが区別されていることを暗に示している。
図6から、タスクが3つの違ったステップによってスケジュールされることが理解されるであろう。1つめは、イベント取扱いルーチンが、キュー内の最初のイベントにたいしてのみ実行されることである。そして、このイベントはそのキューから除去され、そのキューにまだイベントがあるかどうかの判定がなされ、もしあれば、そのイベントキューに対して新たなタスクが生成され、そのタスクがスレッドプールに提供される。
従って、スレッドプールのタスクキューにタスクがスケジュールされる2つの異なる場所が存在することが理解されよう。イベントキュー内の”最初のイベント”に対するタスクは、イベントを挿入したスレッドによって常にスレッドプールに提供される。”次のイベント”に対するタスクは、”最初のイベント”を取り扱ったスレッドによって常にスレッドプールに提供される。これは、キューが空になったときを両方のスレッドが判断しなくてはならないという競合状況の存在につながりうる。つまり、挿入するスレッドは、イベントを挿入する前にキューが空かどうかを判断しなければならない(キューが空であればタスクをスケジュールする必要があるため)。そして、除去するスレッドは、イベントを除去した後にキューが空かどうかを判断しなければならない(キューが空でなければ新たなタスクをスケジュールする必要があるため)。
挿入前にイベントキューが1つのイベント(処理中の1つ)を有しており、それが、挿入するスレッドがイベントを挿入できるようになる前に処理スレッドによって除去されることが起こりうる。挿入するスレッドは空のキューを見ていないので、タスクをスケジュールせず、それ以降イベントは処理されなくなるであろう。
また、2つ(以上)の挿入するスレッドのいずれもが、イベントを挿入する前にキューが空であると判別することも起こりうる。いずれのスレッドも空のキューを見ているため、両方でタスクをスケジュールし、同時に2つのイベントが処理されるであろう。
上述した競合状況は、不可分動作として、イベントキューにイベントを挿入または格納するステップと、イベントがイベントキュー内の最初のイベントかどうかを判別するステップとを実行することによって解決することができる。同様に、上述した競合状況は、不可分動作として、イベントキューからイベントを除去するステップと、イベントキューが空かどうかを判別するステップとを実行することによって解決することができる。これらの不可分動作は、図5および図6においてステップ509および609としてそれぞれ示されている。
図7および図8は、上述したような競合状況を回避するためのアトミックカウンタを有する、本発明の別の実施形態の動作を示している。
別の実施形態において、不可分動作はイベントキューに対するアトミックカウンタによって実現されてよい。処理するスレッドはアトミックカウンタを減少させ、全ての挿入するスレッドはアトミックカウンタを増加させる。増加および減少は、以前の値に戻すアトミックまたは不可分な動作であるため、スレッドはキューが空であるかどうか、またはキューが空であったかどうかを、安全に判定することができる。
図7は、あるイベントをイベントキューに挿入する際に実行されるステップを示している。ステップ701で、ある特定のアプリケーションセッションのイベントキュー内に新たなイベントを挿入すべきであることが決定される。ステップ703でまず同期部23は、そのイベントをイベントキューに格納するように構成される。同期部23はステップ704でカウンタを増加させるように構成され、それによって新たなイベントがイベントキューに追加されたことを示す。同期部23はさらに、ステップ706において、そのイベントがイベントキュー内の最初のイベントかどうかを、カウント値が、増加させる以前にゼロであったかどうかをチェックすることにより、すなわち、イベントキューが空だったかどうかをチェックすることにより判別するように構成される。以前のカウント値がゼロでは無く、そのイベントがイベントキュー内の最初のイベントではないと判別された場合、同期部23は、その特定のイベントについて、タスクキュー内のタスクをスケジュールしない。以前のカウンタ値がゼロであったことにより、ステップ706において、そのイベントが最初のイベントであると判別された場合、同期部23はステップ707において、そのイベントに対してタスクキュー内のタスクをスケジュールする。このように、新たなイベントをイベントキューに挿入する際にカウンタを増加させることが、そのイベントキューが空かどうかに関する明確な指標を提供することが理解されるであろう。
図8は、あるイベントキューからのあるイベントが取り扱われる際に実行されるステップおよび、引き続くステップを示している。図7に関して上述したように、1つ以上のイベントがイベントキューに挿入されており、従ってカウンタの値はゼロでない。ステップ801において、割り当てられているタスクを有するイベント、すなわちイベントキューの最初のイベントが処理される。処理の後、ステップ803でそのイベントはイベントキューから除去される。
本発明の本実施形態によれば、同期部23はステップ804において、カウンタ25を減少させ、それによってイベントキューが空かどうかを示すように構成される。そして同期部23は、ステップ806において、イベントキューが空かどうかを、カウンタ25のカウント値がゼロかどうかをチェックすることによって判別する。ステップ806でイベントキューが空でないと判別されれば、同期部23はステップ807でそのイベントキュー内の別のイベント、例えば次のイベントに対して、新たなタスクをスケジュールするように構成される。順番が来ると、その新たなタスクは、図8に示されるものと同じステップを、スレッドプールからの新たなスレッドにおいて実行する。
この処理は、ステップ806において、イベントキューにイベントが存在しない、すなわちカウント値がゼロであると判別され、処理が終了するまで継続される。このように、イベントキューからイベントを除去する際にカウンタを減少させることが、イベントキューが空かどうかに関する明確な指標を提供することが理解されるであろう。
なお、カウンタを、イベントキューが空かどうかを示すための手段、すなわち図5〜8に示した複数のステップの不可分性の実現を提供するための手段として説明してきたが、この指標を提供するため、従って競合状況を回避するために、他の手段を用いてもよいこと、例えばセマフォのようなロックを用いてもよいことが理解されよう。
上述した本発明は、不必要にスレットをブロックすることなく、また、可能な限り多くの(異なるアプリケーションセッションからの)イベントを同時に処理することにより、複数のキューからの複数のイベントを処理するためにスレッドプールを効率的に用いることができるという利点を有することが理解されよう。ここで説明したシステムはまた、デッドロックおよびライブロックが生じない。
図9から図12は、本発明によって複数のイベントの処理がどのように同期されるかを説明するために提供されている。この例において、4つのアプリケーションセッションS1〜S4と、2つの処理スレッドt1,t2を有するスレッドプールが図示されている。図9を参照すると、アプリケーションセッションS1が3つのイベント(e1a,e1b,e1c)を有し、S2が2つのイベント(e2a,e2b)を有し、S3が1つのイベント(e3a)を有し、S4がイベントを有していないものとして図示されている。スレッドt1およびt2はいずれもアイドル状態であり、タスクはアプリケーションセッションS1,S2,およびS3にスケジュールされているものとして図示されている。
図10はこの時点で何が起こりうるかを示している。スレッドt1がアプリケーションセッションS1のためのタスクを実行しており、従って、アプリケーションセッションS1のイベントキューからのイベントe1aについてのイベント取扱いルーチンを実行している。並行して、スレッドt2は、アプリケーションセッションS2のためのタスクを実行しており、従って、アプリケーションセッションS2のイベントキューからのイベントe2aについてのイベント取扱いルーチンを実行している。これらタスクはタスクキューから直ちに除去され、タスクキューにはアプリケーションセッションS3のためのタスクだけが残る。2つのスレッドt1,t2しか存在しないため、アプリケーションセッションS3のためのタスクはスレッドt1,t2の一方がアイドルになるまで待機しなければならない。
図11は、他のスレッドが、アプリケーションセッションS4のためのイベントキューにイベントe4aを挿入したと仮定した状態を示している。アプリケーションセッションS4のためのイベントキューは空であるため、同期部は、スレッドプールのタスクキューに、アプリケーションセッションS4のための新たなタスクをスケジュールする。その後、スレッドt2がイベントe2aの処理を終えたものとする。すると、スレッドt2は、アプリケーションセッションS2のイベントキューからイベントe2aを除去する。アプリケーションセッションS2のイベントキューは空でないため、同期部は、タスクキュー内に、アプリケーションセッションS2のための新たなタスクをスケジュールする。具体的には、同期部は、タスクキューに、アプリケーションセッションS2のイベントキューから次のイベントe2bのためのタスクをスケジュールする。さらに、スレッドt2はアイドルになっているため、(図9に関して上述したように)処理をタスクキュー内で待機していたアプリケーションセッションS3のためのタスクの実行を開始し、イベントe3aを処理するであろう。
図12では、スレッドt1がイベントe1aの処理を完了したものとする。従って、スレッドt1は、アプリケーションセッションS1のイベントキューからイベントe1aを除去する。アプリケーションセッションS1のイベントキューは空でないため、同期部は、タスクキューに、アプリケーションセッションS1からのイベントe1bのための新たなタスクをスケジュールする。スレッドt1はアイドルであるため、図11においてタスクキューで実行を待っていたアプリケーションセッションS4のためのタスクの実行を開始するであろう。従って、スレッドt1はイベントe4aを処理する。直後に、スレッドt2がアプリケーションセッションS3からのイベントe3aの処理を完了したものとする。スレッドt2はイベントe3aをアプリケーションセッションS3のイベントキューから除去する。アプリケーションセッションS3のイベントキューは空であるため、同期部はアプリケーションセッションS3のために新たなタスクを提供しない。スレッドt2はアイドルであるため、スレッドt2はアプリケーションセッションS2のためのタスクの実行を開始し、それによってアプリケーションセッションS2からのイベントe2bを処理する。
図9〜図12において説明した手順は継続し、それによって同期部は、いかなる瞬間においても、タスクキュー内のタスクとして、イベントキューあたりイベントが1つだけスケジュールされることを保証する。
従って、上述した本発明は、各アプリケーションセッションについて同時に1つのイベントだけが処理されることを保証することにより、イベント同期の実現を可能にしている。
上述した方法は、JEEプラットフォーム上における電気通信サービスの記述を非常に簡潔にする。この方法は、リソースの非効率を招くことなく、かつ全てのリソースを管理することを可能としながら、イベント同期に関する問題を解決するという利点を有する。
上述の実施形態では、自身のスレッドプール19を用いるリソースアダプタ11について説明したが、リソースアダプタ11はプラットフォームのスレッドプールも用いてよい。これにより、これらのシステムリソースも管理することが可能になる。
さらに、フレームワークはいかなる技術にも依存しないため、例えばEJB、サーブレット、および他のリソースアダプタのような、さまざまな技術と組み合わせて用いることができる。
上述した方法は、JEEコネクタアーキテクチャ(JCA)を用いるリソースアダプタ11として好適に実施されることに留意されたい。JCAはレガシーシステムと通信するために提供されているが、JEEプラットフォームの全体において本発明のイベント同期を実現するために好適である。
本発明はいかなる方法においても、スレッドプールに関する制御ソフトウェアを変更しないという利点を有する。従って、スレッドプールは依然として、通常通り、タスクキューからのタスクをできる限り早く実行するように努めるであろう。しかし、イベントキューとスレッドプールとの間に設けられた、本発明のセッションリソースアダプタ内の同期部は、イベントキューあたり最大でも1つのタスクが存在するように管理する。従前のシステムにおいてはそのような仕組みは存在せず、各イベントはタスクと同等であった。
カウント値がゼロの場合にカウンタが空であるものとして説明したが、カウンタが空であることを示すための基準として任意の値を選択可能であることは理解されよう。
また、フローチャートは特定の順序で実行される所定のステップを示したが、これらステップのいくつかは、特許請求の範囲に規定された本発明の範囲内で別の順序で実行されてもよいことに留意されたい。
上述の実施形態は例示であり、本発明を限定しないこと、また本技術分野に属する当業者は、特許請求の範囲の範囲内で多数の代替実施形態を想起することが可能であることに留意されたい。「有する」という単語は、請求項に記述されたもの以外の構成要素や手順以外の存在を排除せず、「1つの」または「ある」という単語は、複数を排除せず、また、請求項における複数の手段の機能は、1つのプロセッサや別の手段によって実現されてもよい。請求項における参照数字等の記載は、その範囲を限定するものと解すべきではない。
Claims (20)
- 電気通信処理プラットフォーム内で複数のアプリケーションセッションに関連付けられた複数のイベントの処理を同期させるための方法であって、前記電気通信処理プラットフォームは複数のタスクを並列に処理するための複数の処理スレッドを有し、前記複数のタスクはタスクキューに格納され、前記方法が、
特定のアプリケーションセッションに関連付けられたイベントキューに1つ以上のイベントを格納するステップと、
特定のアプリケーションセッションの前記イベントキュー内の1つのイベントだけに、前記タスクキュー内のタスクを割り当てるステップと、を有することを特徴とする方法。 - イベントを前記イベントキューに格納する前記ステップが、
前記イベントが前記イベントキュー内の最初のイベントかどうかを判別し、最初のイベントであれば、該イベントに前記タスクキュー内のタスクを割り当てるステップを有することを特徴とする請求項1記載の方法。 - 前記イベントキューから処理済みのイベントを除去するステップをさらに有し、該除去するステップが、
前記イベントキューが空かどうかを判別し、空で無ければ、前記イベントキュー内の別のイベントに前記タスクキュー内のタスクを割り当てるステップを有することを特徴とする請求項1または請求項2記載の方法。 - タスクを割り当てる前記ステップが、前記イベントキュー内の次のイベントにタスクを割り当てるステップを有することを特徴とする請求項3記載の方法。
- 格納する前記ステップおよび判別する前記ステップは、不可分の動作として実行されることを特徴とする請求項2記載の方法。
- 格納する前記ステップおよび判別する前記ステップは、不可分の動作として実行されることを特徴とする請求項3または請求項4記載の方法。
- 前記不可分の動作を実行するためにロックを用いるステップをさらに有することを特徴とする請求項5または請求項6に記載の方法。
- 前記不可分の動作を実行するためにアトミックカウンタを用いるステップをさらに有することを特徴とする請求項5または請求項6に記載の方法。
- 前記アトミックカウンタは、格納するステップまたは除去するステップのそれぞれの間に増加または減少されるカウント値を有し、前記カウント値が、前記キューが空か否か、または、あるイベントが前記イベントキュー内の最初のイベントかどうかを示すことを特徴とする請求項8記載の方法。
- 前記電気通信処理プラットフォームが、Javaエンタプライズエディション(JEE)処理プラットフォームであることを特徴とする請求項1乃至請求項9のいずれか1項に記載の方法。
- タスクキューに格納されている複数のタスクを並列に処理するための複数の処理スレッドを有する電気通信処理プラットフォームで用いるためのリソースアダプタであって、
それぞれがあるアプリケーションセッションに関連付けられ、対応するアプリケーションセッションに関連付けられた1つ以上のイベントを格納するように構成された1つ以上のイベントキューと、
あるイベントキュー内の複数のイベントの処理を同期させるための同期手段であって、あるイベントキュー内の1つのイベントにのみ前記タスクキュー内のタスクを割り当てる同期手段と、を有することを特徴とするリソースアダプタ。 - 前記同期手段は、イベントをイベントキューに格納する際に、イベントがイベントキューに挿入されるべき最初のイベントか否かを判別し、イベントがイベントキューに挿入されるべき最初のイベントであれば、該イベントに対して前記タスクキュー内のタスクを割り当てるように構成されることを特徴とする請求項11記載のリソースアダプタ。
- 前記同期手段は、イベントを前記イベントキューから除去する際に、前記イベントキューが空か否かを判別し、前記イベントキューが空でなければ、前記イベントキュー内の別のイベントに前記タスクキュー内のタスクを割り当てるように構成されることを特徴とする請求項11または請求項12記載のリソースアダプタ。
- 前記同期手段が、前記イベントキュー内の前記次のイベントにタスクを割り当てるように構成されることを特徴とする請求項13記載のリソースアダプタ。
- アトミックカウンタをさらに有し、前記アトミックカウンタは、対応するイベントキューが空か否かを示すカウント値を有することを特徴とする請求項11乃至請求項14のいずれか1項に記載のリソースアダプタ。
- 前記同期手段が、前記イベントキューにイベントを格納する際に前記アトミックカウンタの前記カウント値を増加させるように構成されることを特徴とする請求項15記載のリソースアダプタ。
- 前記同期手段が、前記イベントキューからイベントを除去する際に前記アトミックカウンタの前記カウント値を減少させるように構成されることを特徴とする請求項15または請求項16記載のリソースアダプタ。
- イベントキューがファーストインファーストアウトキューを有することを特徴とする請求項11乃至請求項17のいずれか1項に記載のリソースアダプタ。
- 前記電気通信処理プラットフォームが、Javaエンタプライズエディション(JEE)処理プラットフォームであることを特徴とする請求項11乃至請求項18のいずれか1項に記載のリソースアダプタ。
- 請求項11乃至請求項19のいずれか1項に記載のリソースアダプタを有するか、請求項1乃至請求項10のいずれか1項に記載の方法を実行するように構成されたJEEクラスタ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015039240A JP2015143998A (ja) | 2015-02-27 | 2015-02-27 | 電気通信ネットワークにおけるイベントを処理するための装置および方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015039240A JP2015143998A (ja) | 2015-02-27 | 2015-02-27 | 電気通信ネットワークにおけるイベントを処理するための装置および方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012521974A Division JP5756801B2 (ja) | 2009-07-28 | 2009-07-28 | 電気通信ネットワークにおけるイベントを処理するための装置および方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015143998A true JP2015143998A (ja) | 2015-08-06 |
Family
ID=53888963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015039240A Pending JP2015143998A (ja) | 2015-02-27 | 2015-02-27 | 電気通信ネットワークにおけるイベントを処理するための装置および方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2015143998A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019212032A (ja) * | 2018-06-05 | 2019-12-12 | 株式会社デンソー | マルチコアマイコンを備える電子制御装置 |
KR102127591B1 (ko) * | 2019-01-14 | 2020-06-26 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 프레임워크에서의 동기식 통신 방법 및 장치 |
JP2020161014A (ja) * | 2019-03-28 | 2020-10-01 | 富士通株式会社 | 情報処理装置および実行制御プログラム |
KR20210154525A (ko) * | 2020-06-12 | 2021-12-21 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 미들웨어에서의 직접 및 간접 동기식 통신 방법 및 장치 |
JP2022554414A (ja) * | 2019-12-13 | 2022-12-28 | ソニーグループ株式会社 | 複数の画像装置の管理 |
CN116582501A (zh) * | 2023-05-10 | 2023-08-11 | 北京志凌海纳科技有限公司 | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5756801B2 (ja) * | 2009-07-28 | 2015-07-29 | テレフオンアクチーボラゲット エル エム エリクソン(パブル) | 電気通信ネットワークにおけるイベントを処理するための装置および方法 |
-
2015
- 2015-02-27 JP JP2015039240A patent/JP2015143998A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5756801B2 (ja) * | 2009-07-28 | 2015-07-29 | テレフオンアクチーボラゲット エル エム エリクソン(パブル) | 電気通信ネットワークにおけるイベントを処理するための装置および方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019212032A (ja) * | 2018-06-05 | 2019-12-12 | 株式会社デンソー | マルチコアマイコンを備える電子制御装置 |
JP7070108B2 (ja) | 2018-06-05 | 2022-05-18 | 株式会社デンソー | マルチコアマイコンを備える電子制御装置 |
KR102127591B1 (ko) * | 2019-01-14 | 2020-06-26 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 프레임워크에서의 동기식 통신 방법 및 장치 |
JP2020161014A (ja) * | 2019-03-28 | 2020-10-01 | 富士通株式会社 | 情報処理装置および実行制御プログラム |
JP7197794B2 (ja) | 2019-03-28 | 2022-12-28 | 富士通株式会社 | 情報処理装置および実行制御プログラム |
JP2022554414A (ja) * | 2019-12-13 | 2022-12-28 | ソニーグループ株式会社 | 複数の画像装置の管理 |
JP7487303B2 (ja) | 2019-12-13 | 2024-05-20 | ソニーグループ株式会社 | 複数の画像装置の管理 |
KR20210154525A (ko) * | 2020-06-12 | 2021-12-21 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 미들웨어에서의 직접 및 간접 동기식 통신 방법 및 장치 |
KR102388083B1 (ko) | 2020-06-12 | 2022-04-18 | 건국대학교 산학협력단 | 이벤트 기반 비동기식 통신 미들웨어에서의 직접 및 간접 동기식 통신 방법 및 장치 |
CN116582501A (zh) * | 2023-05-10 | 2023-08-11 | 北京志凌海纳科技有限公司 | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
CN116582501B (zh) * | 2023-05-10 | 2024-02-09 | 北京志凌海纳科技有限公司 | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5756801B2 (ja) | 電気通信ネットワークにおけるイベントを処理するための装置および方法 | |
JP2015143998A (ja) | 電気通信ネットワークにおけるイベントを処理するための装置および方法 | |
US9501319B2 (en) | Method and apparatus for scheduling blocking tasks | |
US8245207B1 (en) | Technique for dynamically restricting thread concurrency without rewriting thread code | |
EP3425502A1 (en) | Task scheduling method and device | |
CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
Pyarali et al. | Evaluating and optimizing thread pool strategies for real-time CORBA | |
US9231995B2 (en) | System and method for providing asynchrony in web services | |
US9778962B2 (en) | Method for minimizing lock contention among threads when tasks are distributed in multithreaded system and apparatus using the same | |
US9733981B2 (en) | System and method for conditional task switching during ordering scope transitions | |
US8196145B2 (en) | Determining real time stateful business application processing in an otherwise stateless service-oriented architecture | |
JPH0563821B2 (ja) | ||
WO2016061935A1 (zh) | 一种资源调度方法、装置及计算机存储介质 | |
CN114168302A (zh) | 任务调度方法、装置、设备及存储介质 | |
EP2664989A1 (en) | Task scheduling | |
US9513980B2 (en) | Transparent distribution and decoupling of modules using asynchronous communication and scopes | |
US10970098B2 (en) | Methods for sharing input-output device for process automation on a computing machine and devices thereof | |
CN109558254B (zh) | 异步回调方法、系统、装置及计算机可读存储介质 | |
CN104932946B (zh) | 用于处理电信网络中的事件的设备和方法 | |
US9792162B2 (en) | Network system, network node and communication method | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN115640100A (zh) | 一种虚拟机信息同步方法及计算机可读介质 | |
JP2000020323A (ja) | スケジュ―リング装置及び方法並びに記録媒体 | |
Exton et al. | Raptor: Distributed Scheduling for Serverless Functions | |
CN114168233B (zh) | 一种数据处理方法、装置、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160222 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A132 Effective date: 20160325 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20161024 |