(57)【特許請求の範囲】
【請求項１】
プライオリティキューにおける協働的同時並行性をサポートするための方法であって、前記プライオリティキューは高速レーンを含み、
処理対象となる前記プライオリティキューにおける１つ以上の要求を求めて競合する１つ以上のスレッドを検出するステップと、
前記競合する１つ以上のスレッドのうち、処理対象となる要求を獲得しない犠牲スレッドが、前記高速レーンに前記要求を配置するステップと、
前記犠牲スレッドが、残りの前記競合するスレッドを解放するステップとを含み、前記解放されたスレッドは、引き続き、前記高速レーンにおける前記要求を消費する、方法。
【請求項２】
前記プライオリティキューにカレンダーリングを含めるステップをさらに含み、前記カレンダーリングは、予め構成されたサービス品質（ＱｏＳ）未満の目標応答時間を有するさまざまな要求を格納するよう動作する、請求項１に記載の方法。
【請求項３】
前記予め構成されたサービス品質（ＱｏＳ）を約２秒となるように規定するステップをさらに含む、請求項２に記載の方法。
【請求項４】
より高速にスキャンするために前記カレンダーリングと同期して更新されるビットマップを用いるステップをさらに含む、請求項２または３に記載の方法。
【請求項５】
アウトライアリストを前記カレンダーリングに関連付けるステップをさらに含み、前記アウトライアリストは、前記予め構成されたサービス品質（ＱｏＳ）よりも長い目標応答時間を有する要求を格納するよう動作する、請求項２から４のいずれかに記載の方法。
【請求項６】
前記カレンダーリングにおいて要求を見つけることができない場合、前記アウトライアリストにおける要求を前記カレンダーリングへとプロモートするステップをさらに含む、請求項５に記載の方法。
【請求項７】
シーケンサを用いて、１つ以上の競合スレッドを順序付けるステップをさらに含む、請求項１から６のいずれかに記載の方法。
【請求項８】
引き続き、前記犠牲スレッドを介して、前記カレンダーリングにおける別の要求を主張するステップをさらに含む、請求項２〜６のいずれかに記載の方法。
【請求項９】
前記プライオリティキューが空である場合にスレッドプールのスレッドを利用可能にするステップをさらに含む、請求項１から８のいずれかに記載の方法。
【請求項１０】
機械読取可能な命令を含むコンピュータプログラムであって、前記機械読取可能な命令は、実行されると、システムに、請求項１から９のいずれかに記載の方法を実行させる、コンピュータプログラム。
【請求項１１】
プライオリティキューにおける協働的同時並行性をサポートするためのシステムであって、前記プライオリティキューは高速レーンを含み、
１つ以上のマイクロプロセッサと、
前記１つ以上のマイクロプロセッサ上に延びるプライオリティキューとを含み、前記プライオリティキューは、
処理対象となる前記プライオリティキューにおける１つ以上の要求を求めて競合する１つ以上のスレッドを検出するステップと、
前記競合する１つ以上のスレッドのうち、処理対象となる要求を獲得しない犠牲スレッドが、前記高速レーンに要求を配置するステップと、
前記犠牲スレッドが、残りの前記競合するスレッドを解放するステップとを実行するよう動作し、前記解放されたスレッドは引き続き前記高速レーンにおける前記要求を消費する、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権表示：
この特許文献の開示の一部は、著作権保護の対象となる題材を含んでいる。著作権の所有者は、特許商標庁の包袋または記録に掲載されるように特許文献または特許情報開示を誰でも複製できることに対して異議はないが、その他の点ではすべての如何なる著作権をも保有する。
【０００２】
発明の分野：
本発明は、概して、ミドルウェアなどのコンピュータシステムおよびソフトウェアに関し、特に、ミドルウェアマシン環境においてキューをサポートするためのシステムおよび方法に関する。
【背景技術】
【０００３】
背景：
どのような大きな組織でも、その中では、長年を経て、さまざまな異なるコンピュータハードウェア、オペレーティングシステム、およびアプリケーションソフトウェアを含むＩＴインフラストラクチャが無秩序に拡大していることが多い。このようなインフラストラクチャの個々のコンポーネント自体は巧みに設計され適切に維持管理されているかもしれないが、このようなコンポーネントを相互に接続、または、リソースを共有しようとすると、それは困難な管理タスクであることが多い。近年、組織の関心は、仮想化およびストレージの集中化といった技術に向けられるようになっており、さらに近年では、共有インフラストラクチャの基礎を提供できるクラウドコンピューティングに向けられている。しかしながら、このような環境に特に適したオールインワンのプラットフォームはほとんどない。これらが、本発明の実施形態が取組もうとしている一般的な分野である。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要：
プライオリティキューにおける協働的同時並行性（cooperative concurrency）をサポートするためのシステムおよび方法が提供される。プライオリティキューは、カレンダーリングおよび高速レーンを含んでおり、プライオリティキューにおける１つ以上の要求を主張するよう競合する１つ以上のスレッドを検出することができる。さらに、犠牲スレッドは、プライオリティキューにおける高速レーンに要求を配置し、競合スレッドを解放することができ、引き続き、高速レーンにおける要求を消費することができる。
【０００５】
本発明の他の目的および利点は、添付の図面に照らして読まれると、さまざまな実施形態の以下の詳細な説明から当業者にとって明らかになるであろう。
【図面の簡単な説明】
【０００６】
【図１】発明のある実施形態に従ったミドルウェアマシン環境１００の例を示す図である。
【図２】発明のある実施形態に従ったミドルウェアマシンプラットフォームまたは環境の別の例を示す図である。
【図３】発明のさまざまな実施形態に従った、ミドルウェアマシン環境において要求を処理するためにプライオリティキューを用いる例を示す図である。
【図４】ミドルウェアマシン環境においてノンブロッキングキューをサポートする例を示す図である。
【図５】発明のさまざまな実施形態に従った、コンカレントプライオリティキューをサポートする例を示す図である。
【図６】発明のさまざまな実施形態に従った、コンカレントプライオリティキューに要求を追加する例を示す図である。
【図７】発明のさまざまな実施形態に従った、コンカレントプライオリティキューに対して要求を主張する例を示す図である。
【図８】発明のさまざまな実施形態に従った、プライオリティキューにおける協働的同時並行性をサポートする例を示す図である。
【図９】発明の実施形態に従った、プライオリティキューに対して要求を主張するための例示的なフローチャートを示す図である。
【図１０】発明の実施形態に従った、プライオリティキューにおける協働的同時並行性をサポートするための例示的なフローチャートを示す図である。
【発明を実施するための形態】
【０００７】
詳細な説明：
ここで、ミドルウェアマシン環境において協働的同時並行性をサポートすることができるシステムおよび方法を説明する。
【０００８】
図１は、発明のある実施形態に従ったミドルウェアマシン環境１００の例を示す。図１に示されるように、各ミドルウェアマシンシステム１０２は、数個のミドルウェアマシンラックコンポーネント１０４を含み、ミドルウェアマシンラックコンポーネント１０４は各々、高性能ミドルウェアマシンハードウェアノード１０６（たとえば６４ビットプロセッサ、高性能大型メモリ、ならびに冗長インフィニバンドおよびイーサネット（登録商標）ネットワーキング）と、ミドルウェアマシンソフトウェア環境１０８との組合せを含む。その結果は、数日または数カ月ではなく数分で提供することができ、要求に応じて拡大縮小できる、完全なアプリケーションサーバ環境である。ある実施形態に従うと、各ミドルウェアマシンシステムは、満杯の、２分の１の、もしくは４分の１のラックとしてまたはラックコンポーネントからなるその他の構成として準備することができ、数個のミドルウェアマシンシステムを、ここでもインフィニバンドを用いて連結することにより、より大きな環境を作ることができる。各ミドルウェアマシンソフトウェア環境に、数個のアプリケーションサーバインスタンスまたはその他のソフトウエアインスタンスを設けることができる。たとえば、図１に示されるように、アプリケーションサーバインスタンス１０９が、仮想マシン１１６と、オペレーティングシステム１２０と、仮想化層１２４と、アプリケーションサーバ層１２８（たとえば、サーブレット（Servlet）１３２、ＥＪＢ１３４  、およびグリッドリンク（GridLink）１３６それぞれのコンテナを含むウェブロジック（WebLogic））とを含み得る。別のアプリケーションサーバインスタンス１１０は、仮想マシン１１８と、オペレーティングシステム１２２と、仮想化層１２６と、データグリッド層１４０（たとえばアクティブキャッシュ１４２を含むコヒーレンス（Coherence））とを含み得る。インスタンスは各々、エクサロジック統合（integration）パックといったミドルウェアマシン統合コンポーネント１５０を用いて、互いに通信でき、かつ、そのミドルウェアマシンハードウェアノードおよびその他のノード双方とも通信できる。ミドルウェアマシン統合コンポーネント１５０自体が、以下でさらに詳細に説明するように、インフィニバンドおよびその他の特徴に対するサポートといったいくつかの最適化特徴を提供する。
【０００９】
図２は、発明のある実施形態に従ったミドルウェアマシンプラットフォームまたは環境の別の例を示す。図２に示されるように、各アプリケーションサーバインスタンスは、ミドルウェアマシン環境内において送信側および／または受信側１６０、１６１として機能し得る。各アプリケーションサーバインスタンスは、アプリケーションサーバがインフィニバンドネットワーク１６４を介して互いに通信できるようにするマルチプレクサ１６２、１６３にも関連付けられている。図２に示される例では、アプリケーションサーバインスタンスは、ソケットダイレクトプロトコル（sockets direct protocol）１６８に関連付けられ得るカーネルスペース（kernel space）１６５と、ユーザスペース１６７と、アプリケーションサーバ（たとえばウェブロジックスペース）１６６と、ＪＶＭ（たとえばジェイロキット／ホットスポット層）１７０と、ＷＬＳコア１７２と、サーブレットコンテナ１７４と、ＪＳＰコンパイラ１７６とを含み得る。他の例に従うと、ミドルウェアタイプのソフトウェアの他の組合せが含まれていてもよい。さまざまな実施形態に従い、マシン統合コンポーネントは、ゼロバッファコピー、分散／収集Ｉ／Ｏ、Ｔ３接続、遅延デシリアライゼーション、およびグリッドリンクデータソースなどの特徴１８０を提供することにより、共有されるインフラストラクチャの基礎を提供するとともにこのインフラストラクチャ内での性能を改善することができる。
【００１０】
プライオリティキュー
本発明のさまざまな実施形態に従うと、コンカレントシステムは、適切なサービスレベルアグリーメント（ＳＬＡ：service level agreement）をサービスに提供するために、プライオリティキューを用いて、受信した要求に優先順位を付けることができる。
【００１１】
図３は、発明のさまざまな実施形態に従った、ミドルウェアマシン環境において要求を処理するためのプライオリティキューを用いる例を示す。図３に示されるように、１つ以上のスレッド、たとえばデシリアライズスレッドＡ３１１〜Ｂ３１２は、１つ以上の要求３２０を含む受信ネットワークトラフィック３１０をデシリアライズすることができる。デシリアライズスレッドＡ３１１〜Ｂ３１２は、たとえばadd()メソッドを用いて、プライオリティキュー３０１に要求３２０を配置することができる。次いで、複数のワーカースレッド、たとえば、ワーカースレッドＡ３２１〜Ｃ３２３がプライオリティキュー３０１に同時にアクセスすることができ、たとえばdelete_min()メソッドを用いて、要求３２０を主張することができる。
【００１２】
プライオリティキュー３０１は、競合者間のインタラクションがシステム全体のスループットの低下をもたらすことのないように、要求の厳しい同時並行性基準を満たすよう設計することができる。加えて、プライオリティキュー３０１は、一定のメモリフットプリントを有するように実現することができ、このため、ＪＶＭは、一定サイズのプリミティブ配列上でその動作をより最適化することができ、実質的なキャッシュ効率を達成することができるようになる。
【００１３】
本発明のさまざまな実施形態に従うと、プライオリティキュー３０１は、カレンダーキューに基づいて、たとえばWebLogicアプリケーションサーバにおいて提供されるカレンダーキューに基づいて、実現することができる。カレンダーキューは、複数のバケットを備えたカレンダーを含み得る。複数のバケットの各々は、特定の短時間内に収まるイベントを格納することができる。たとえば、複数のバケットは、目標サービス時間を現在時間と比較することによって、ソートおよび配置することができる。時間差が第１のバイト内であれば、要求は、第１の２５６個のバケットのうち１つのバケットに格納することができる。特定のバケットは、要求を実行するための目標時間の実際値を用いて選択することができる。さらに、時間差が第２のバイト内であれば、要求は、第２の２５６個のバケットのうち１つのバケットに格納することができる。
【００１４】
コンシューマが、たとえばワーカースレッドＡ３２１〜Ｃ３２３のうちの１つを介して、最早の要求を実行するように構成された次の要求を除去しようとする場合、システムは、空ではない第１のバケットを探してカレンダーをスキャンすることができる。このバケットが第１の２５６個のバケットのうちの１つでない場合、カレンダーキューは、ループ・アンド・プロモート法（loop and promote method）を用いて、第１の２５６個のバケットに向かって「１レベル低い」バケットに要求を移動させることができる。最終的に、いくつかの要求を第１の２５６個のバケットにおける１つ以上のバケットへとプロモートすることができ、コンシューマは要求を主張し、これに応じて次の段階に進むことができる。
【００１５】
上述のプロモーションプロセスは、システムの全体的な性能に影響を及ぼす可能性のある対数コストを含み得る。加えて、カレンダーキューについて他の設計があってもよく、その性能は、「0(1)add, O(logN) delete_min」をとるかまたは「O(logN)add, 0(1)delete_min」をとるかの選択に制限される可能性がある。
【００１６】
図４は、ミドルウェアマシン環境においてノンブロッキングキューをサポートする例を示す。図４に示されるように、複数のコンシューマ、たとえばコンシューマＡ４１１〜Ｂ４１２が、ミドルウェアマシン環境４００におけるプライオリティキュー４０１に同時にアクセスすることができる。プライオリティキュー４０１は、ノンブロッキングキューとして実現することができ、要求マネージャ４０２を介してアクセスすることができる。
【００１７】
スレッドプール４０３を管理する要求マネージャ４０２は、異なるスレッドを異なる要求に関連付けるための別個のロジックを有し得る。たとえば、要求マネージャ４０２は、ロック構造を用いて、すべてのスレッドプールメソッドコールを、同期されたステートメントでプライオリティキュー４０１、または同期されたブロック４１０、にラップすることによって、シリアライズすることができる。
【００１８】
このように、プライオリティキュー４０１上での動作はシングルスレッド設計によって制限される可能性がある。なぜなら、シリアライズがノンブロッキングプライオリティキュー４０１の外部でなされるからである。
【００１９】
コンカレントプライオリティキュー
図５は、発明のさまざまな実施形態に従ったコンカレントプライオリティキューをサポートする例を示す。図５に示されるように、複数のコンシューマ、たとえばコンシューマＡ５１１〜Ｃ５１３は、ミドルウェアマシン環境５００におけるコンカレントプライオリティキュー５０１に同時にアクセスすることができる。
【００２０】
コンカレントプライオリティキュー５０１は、受信した要求に優先順位を付けて格納することのできるカレンダー、たとえばカレンダーリング５０２を含み得る。サイズが制限されているカレンダーリング５０２は、予め構成された制限時間内の目標応答時間を有する要求を格納するように構成することができる。カレンダーリング５０２内において、要求は、要求のサービス品質（ＱｏＳ：Quality of Service）、たとえば目標サービス時間、と合致する位置にあるリングバッファに直接格納または配置することができる。
【００２１】
このため、システムは、カレンダーキューのメモリフットプリントを変更することなく、要求のためのルックアップをはるかに安価に行うことができる。さらに、システムは、Ｏ（１）動作としてカレンダーキューにエレメントを追加し続ける一方で、カレンダーキューのdelete_min動作についての対数の複雑さを緩和して、ほぼ線形のキャッシュ効率サーチにすることができる。
【００２２】
加えて、予め構成された制限時間よりも長い目標サービス時間を含む要求は、アウトライアのリスト、たとえばアウトライアリスト５０４、に追加することができる。これらの要求のスケジューリングがタイムクリティカルでない可能性があるので、システムは、ソート済みのアウトライアのリスト５０４に対してよりゆっくりと追加することを許可する。さらに、コンカレントプライオリティキュー５０１は、シーケンサ、たとえばoutliers_seqを用いて、アウトライアリストのための先入れ先出し（ＦＩＦＯ：first-in-first-out）順序を同じＱｏＳで実施することができる。
【００２３】
たとえば、カレンダーリング５０２は、２秒未満の目標応答時間（またはＱｏＳ）を有する要求を格納するように構成することができる。なぜなら、２秒を超えるＱｏＳを有する要求はまれにしかないと考えられ得るからである。さらに、２秒未満のＱｏＳを有する要求は、ＱｏＳと合致するカレンダーリング５０２に配置することができる一方で、２秒を超えるＱｏＳを有する要求はアウトライアのリスト５０４に配置することができる。
【００２４】
図４に示されるカレンダーキューとは異なり、要求マネージャ５１０は、同期されたステートメントで、すべてのコールをカレンダーキュー５０１に入れる必要はない。同期されたブロック５０６は、継続渡し５０７をサポートするものであり、コンカレントプライオリティキュー５０１の範囲内で実現することができる。コンシューマ、たとえばコンシューマＡ５１１〜Ｃ５１３は、コンカレントプライオリティキュー５０１の外部からスレッドプール５２０にアクセスする必要がないかもしれない。
【００２５】
継続渡しを用いると、システムは、カレンダーキュー５０１をノンブロッキングからブロッキングに変換することができる。継続渡し５０７は、コンシューマＡ５１１〜Ｃ５１３が、スレッドプール５２０における活動停止中のワーカーまたはスレッド５３０を管理することを可能にし、これにより、スレッドプール５２０において待機している可能性のあるスレッド５３０を再使用できるようにする。
【００２６】
加えて、コンカレントプライオリティキュー５０１は、コンカレントプライオリティキュー５０１が競合を検出することを可能にし、高速レーン５０５を用いて協働的同時並行性をサポートすることができるシーケンサ５０３を含み得る。このため、コンカレントプライオリティキュー５０１は、競合についての情報を公開するのにロックを必要とすることなく、競合を認識して適切に処理することができる。
【００２７】
コンカレントプライオリティキューに対する要求の追加
図６は、発明のさまざまな実施形態に従ったコンカレントプライオリティキューに要求を追加する例を示す。図６に示されるように、ミドルウェアマシン環境６００におけるプライオリティキュー６０１はカレンダーリング６０２およびアウトライアリスト６０３を含み得る。プライオリティキュー６０１は、プライオリティキュー６０１の外部からアクセスすることのできないスレッドプール６１０に関連付けることができる。
【００２８】
発呼者、たとえば、デシリアライザＡ６１１は、受信した要求、たとえば要求Ａ６３１、をプライオリティキュー６０１に追加することができる。たとえば、受信した要求が予め構成された制限時間内のＱｏＳを有する場合、デシリアライザＡ６１１は要求Ａ６３１をカレンダーリング６０２に直接追加することができる。そうでない場合、要求に関連付けられるＱｏＳが予め構成された制限時間を越えるときには、発呼者は、受信した要求Ｂ６３２をアウトライアリスト６０３に追加することができる。
【００２９】
加えてプライオリティキュー６０１が空である場合、プライオリティキュー６０１は、（待機者リストまたは待機者プールとも称される）スレッドプール６１０におけるスレッド、たとえばスレッドＡ６２１、を起動させることができる。次いで、コンシューマ、たとえばスレッドＡ６２１に関連付けられるコンシューマＡ６１２は、カレンダーリング６０２に要求Ａ６３１が追加されたことを認識することができ、引き続き、要求Ａ６３１をタイムリーに消費することができる。
【００３０】
発明の一実施形態に従うと、コンカレントプライオリティキューは、継続渡し特徴を用いて、発呼者がスレッドプール６１０におけるスレッドを管理することを可能にし得る。
【００３１】
コンカレントプライオリティキューに対する要求の主張
図７は、発明のさまざまな実施形態に従った、コンカレントプライオリティキューに対して要求を主張する例を示す。図７に示されるように、コンシューマ、たとえばコンシューマＡ７１１は、ミドルウェアマシン環境７００においてコンカレントプライオリティキュー７０１に対して１つ以上の要求、たとえば要求Ａ７３１を主張することができる。コンカレントプライオリティキュー７０１はカレンダーリング７０２、アウトライアリスト７０３および高速レーン７０４を含み得る。
【００３２】
ビットマップ７０５は、カレンダーリング７０２と同期して作成および更新することができる。コンシューマＡ７１１がカレンダーリング７０２に対して要求Ａ７３１を主張しようとする場合、カレンダーリング７０２の効率を向上させるために、ビットマップ７０５を用いてカレンダーリング７０２をスキャンすることができる。たとえば、カレンダーリング７０２におけるリファレンスを調べる代わりに、単純なビットマップ上でのビットスキャン動作を用いて、カレンダーリング７０２における多数のエントリ（たとえば、６４のエントリ）を分析することができる。
【００３３】
さらに、カレンダーリング７０２が空である場合、コンカレントプライオリティキュー７０１は、１つ以上の要求、たとえば要求Ｂ７３２を、アウトライアリスト７０３からカレンダーリング７０２へとプロモートすることができる。
【００３４】
加えて、作業負荷が集中している場合、複数の要求がカレンダーリング７０２における同じカレンダーエントリまたはバケットに分類され得る可能性が十分にある。盗まれた要求のリスト７０６は、カレンダーリング７０２におけるこのような要求を主張することによってもたらされる競合を減らすために用いることができる。さらに、盗まれた要求のリスト７０６は、より多くの要求が同じカレンダーエントリにある場合、より長くなる可能性がある。このため、全体としてカレンダーリング７０２におけるシングルエントリに収まる要求のリストを当該盗まれた要求のリスト７０６に入れることにより、コンシューマは、カレンダーリング７０２へのアクセスをそれほど頻繁にシリアライズしなくてもよくなる。
【００３５】
本発明のさまざまな実施形態に従うと、コンカレントプライオリティキュー７０２は、協働的同時並行性をサポートするために用いることができる高速レーン７０４を維持することができる。
【００３６】
協働的同時並行性
図８は、発明のさまざまな実施形態に従った、プライオリティキューにおいて協働的同時並行性をサポートする例を示す。図８に示されるように、ミドルウェアマシン環境８００は、複数のコンシューマ、たとえばコンシューマＡ８１１〜Ｂ８１２によって同時にアクセスすることができるプライオリティキュー８０１を含み得る。プライオリティキュー８０１はカレンダーリング８０２および高速レーン８０３を含み得る。プライオリティキュー８０１はまた、プライオリティキュー８０１の外部からはアクセスできない可能性があるスレッドプール８１０を用いることもできる。ここで、コンシューマＡ８１１〜Ｂ８１２の各々は、スレッドプール８１０におけるスレッド、たとえばスレッドＡ８２１〜Ｂ８２２に関係している可能性がある。
【００３７】
シーケンサ８０４は、プライオリティキュー８０１について競合者、たとえばコンシューマＢ８１２、を検出するために犠牲者、たとえばコンシューマＡ８１１によって用いられてもよい。
【００３８】
本発明のさまざまな実施形態に従うと、プライオリティキュー８０１は、協働的同時並行性ストラテジーを用いることによって、コンシューマＡ８１１〜Ｂ８１２間の競合を減らすことができる。
【００３９】
図８に示されるように、競合を検出した後、犠牲者、たとえばコンシューマＡ８１１は要求、たとえば要求Ａ８３１を高速レーン８０３（要求Ａ′８３３として）に配置することができ、引き続き、カレンダーリング８０２における別の要求、たとえば要求Ｂ８３２を、それが有効であれば、主張し得る。一方で、コンシューマＡ８１１は、スレッドプール８１０における競合スレッド、たとえばスレッドＢ８２２を解放することができ、これにより、競合者、たとえばコンシューマＢ８１２が最終的に高速レーン８０３に対して要求Ａ′８３３を主張することを可能にする。
【００４０】
さらに、競合者が複数いる場合、犠牲者８１１は、解放され得る最大数の競合者を制御することによって高速レーン８０３における要求のアクセス可能性を制御することができる。これは、競合者がインデックス、fastLane_wに等しいfastLane_r（fastLane_r = fastLane_w）、を設定することができる場合にのみ、位置fastLane_wにあるカレンダーリング８０２に対して競合者が要求を主張することができるからである。各々の競合者は、fastLane_rを１つずつしか増やすことができないので、競合者は、解放される競合者の数だけしかfastLane_rの値を増やすことができない。
【００４１】
協働的同時並行性を用いると、コンカレントプライオリティキュー８０１は、たとえば、さまざまな競合者のための平均的な待ち時間を短縮して、待ち時間を向上させることができる。加えて、協働的同時並行性は、コンカレントプライオリティキュー８０１のＣＰＵキャッシュ位置を改善させることができる。なぜなら、１つの犠牲コンシューマがより多くの作業をシングルスレッドで行うことができるからである。
【００４２】
図９は、発明の実施形態に従った、プライオリティキューに対して要求を主張するための例示的なフローチャートを示す。図９に示されるように、ステップ９０１において、コンシューマまたは要求マネージャなどの発呼者が、まず、高速レーンが空であるかどうかをチェックすることができる。
【００４３】
ステップ９０２において、高速レーンが空でない場合、コンシューマは高速レーンに対して要求を主張するよう試みることができる。高速レーンに対する要求の主張が行なわれない場合、要求の主張に成功した別のコンシューマが存在していることとなる。最終的に、コンシューマは要求を主張することができるかまたは高速レーンが空であることを確認することができ、この場合、delete_minにはこれ以上コンシューマは存在していない。
【００４４】
ステップ９０３において、高速レーンが空である場合、発呼者は、カレンダーキューに対して要求を主張するためのループに進むことができる。カレンダーキューに対して要求を主張するためのループは複数の繰返しを含み得る。各々の繰返しの初めに、発呼者は、第１の要求のリストをカレンダー配列に配置しようとすることができる。また、発呼者は、リストから第１の要求を選ぶよう試みることができる。
【００４５】
ステップ９１０において、発呼者は、たとえば、シーケンサにおけるリーダのチケットがシーケンサにおける最新の既知の自由値よりも進められているかどうかをチェックすることによって、競合があるかどうかをチェックすることができる。
【００４６】
次いで、ステップ９１３において、発呼者が競合を検出しなければ、コンシューマは引き続きカレンダーキューに対する要求を主張することができる。
【００４７】
そうでない場合、ステップ９１１において、発呼者が競合を検出した場合、コンシューマは、要求を協働的に高速レーンに配置することができ、１人の競合者を解放することができる。このコンシューマがdelete_min内にある限り、解放された競合者は、最終的に高速レーンに対して要求を主張することができる。
【００４８】
さらに、ステップ９１２において、要求が競合者に与えられるので、コンシューマは、カレンダーリングにおける次の要求を主張するよう試みる。これにより、コンシューマは、ループにおける別の繰返しの初めに相当するステップ９１０に到達する。
【００４９】
最終的に、キューが空になるか、または、競合者が検出されないか、または、高速レーンが一杯であるとみなされる。高速レーンが一杯であるとみなされる場合、コンシューマはループを破壊し、キューのサイズを更新し、１人以上の競合者を解放することができ、これら１人以上の競合者は、最終的に、高速レーンの外部で要求を主張するためにループに入ることが可能となるだろう。
【００５０】
図１０は、発明の実施形態に従った、プライオリティキューにおける協働的同時並行性をサポートするための例示的なフローチャートを示す。図１０に示されるように、ステップ１００１において、システムは、プライオリティキューにおける１つ以上の要求を主張するよう競合している１つ以上のスレッドを検出することができる。次いで、ステップ１００２において、犠牲スレッドはプライオリティキューにおける高速レーンに要求を配置することができる。さらに、ステップ１００３において、犠牲スレッドは、スレッドプールにおいてブロックされている上記競合スレッドを解放することができる。この場合、解放された競合スレッドは、引き続き、高速レーンにおける要求を消費する。
【００５１】
いくつかの実施形態においては、上述の方法のうちの１つを実施するためのコンピュータプログラムが提供される。発明の実施形態に従うと、コンピュータプログラムは、システムに、プライオリティキューにおける１つ以上の要求を主張するよう競合する１つ以上のスレッドを検出するステップと；犠牲スレッドを介してプライオリティキューにおける高速レーンに要求を配置するステップと；犠牲スレッドを介して競合スレッドを解放するステップとを実行させる。解放された競合スレッドは、引き続き、高速レーンにおける要求を消費する。
【００５２】
本発明は、本開示の教示に従いプログラムされた、１つ以上のプロセッサ、メモリ、および／またはコンピュータ読取可能な記録媒体を含む、従来の汎用もしくは専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを１つ以上用いて、適宜実現し得る。適切なソフトウェアコーディングは、熟練したプログラマが本開示の教示に基づいて容易に準備できる。これはソフトウェア技術における当業者には明らかであろう。
【００５３】
実施形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された記録媒体または（１つまたは複数の）コンピュータ読取可能な媒体であるコンピュータプログラムプロダクトを含む。この記録媒体は、フロッピー（登録商標）ディスク、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム（分子メモリＩＣを含む）、または、命令および／またはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。
【００５４】
本発明に関するこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。実施形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者が本発明のさまざまな実施形態および意図している特定の用途に適したさまざまな変形を理解できるようにするために、選択され説明されている。本発明の範囲は、添付の特許請求の範囲およびその均等物によって定められることが意図されている。
【図１】
0006412888.tif 000002
【図２】
0006412888.tif 000003
【図３】
0006412888.tif 000004
【図４】
0006412888.tif 000005
【図５】
0006412888.tif 000006
【図６】
0006412888.tif 000007
【図７】
0006412888.tif 000008
【図８】
0006412888.tif 000009
【図９】
0006412888.tif 000010
【図１０】
0006412888.tif 000011