JP2008539517A - 同時処理領域を用いたマルチスレッディング - Google Patents

同時処理領域を用いたマルチスレッディング Download PDF

Info

Publication number
JP2008539517A
JP2008539517A JP2008508960A JP2008508960A JP2008539517A JP 2008539517 A JP2008539517 A JP 2008539517A JP 2008508960 A JP2008508960 A JP 2008508960A JP 2008508960 A JP2008508960 A JP 2008508960A JP 2008539517 A JP2008539517 A JP 2008539517A
Authority
JP
Japan
Prior art keywords
processing
work item
component
software application
given
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
Application number
JP2008508960A
Other languages
English (en)
Inventor
エフ.アーマド アーシャド
シャムスンダール バラスブラマニアン
エム.オレニック ブラッド
エー.ジパースキー クレメンス
クラン シメオン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2008539517A publication Critical patent/JP2008539517A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

ソフトウェアアプリケーションのコンポーネントを同時処理領域と呼ばれる別個の領域に分割する方法、システム、およびコンピュータ製品が提供される。計算コストが高い低速なまたは実行に時間がかかるメソッドは、かかる領域内に配置されることができ、したがって関連するアプリケーションをエンドユーザに対して応答性が良好な状態に保つ。本発明の一態様によれば、所与の同時処理領域は、その部分内に同期およびスレッドの隔離を行うための、ならびにデータ駆動型の動的に構成および再構成されるアプリケーションにおけるその他のそのような部分との同時処理を提供するための、ランタイムオブジェクトの部分である。

Description

本発明は、同時処理領域を用いたマルチスレッディングに関する。
コンピュータ時代の到来と共に、コンピュータユーザおよびソフトウェアユーザは、書くこと、計算すること、編成すること、プレゼンテーションを準備すること、電子メールを送信および受信すること、作曲をすることなどに役立つユーザフレンドリーなソフトウェアアプリケーションに慣れてしまった。例えば、現在の電子的な文書処理アプリケーションは、ユーザが様々な有用な文書を作成することを可能にする。現在の表計算アプリケーションは、ユーザがデータを入力し、操作し、編成することを可能にする。現在の電子的なスライドプレゼンテーションアプリケーションは、ユーザがテキスト、画像、データ、またはその他の有用なオブジェクトを含む様々なスライドプレゼンテーションを作成することを可能にする。
多くのそのようなアプリケーションは、所与のアプリケーションメソッド全体のうちの個々のメソッドを実行するために多くのアプリケーションコンポーネントが逐次的におよび/または同時に実行されるコンポーネントフレームワークに従って動作する。通常、同時的なコンポーネントメソッドは、様々なメソッドのマルチスレッディングを必要とする。つまり、同時並行処理をサポートするアプリケーションは、複数のメソッドのスレッドを使用する。そのようなアプリケーションの基本的な要件は、複数のスレッドを、スレッド間で共有される任意のデータに矛盾がないように同期させるアプリケーションの能力である。ソフトウェアにおける困難のある領域が、再入である。メソッドを同期することによってしばしば引き起こされる問題が、非決定性の再入である。概して、再入は、スレッドがネストされた呼び出しを行い、それによって最初の呼び出しを完了する前に同一のオブジェクトに再び入る場合に発生する。例えば、スレッドが第1のオブジェクトの第1のタスクに対する呼び出しを実行しており、その実行の一部として第2のオブジェクトのタスクを呼び出す場合、スレッドは第1のオブジェクトに対する呼び出しを完了し、その呼び出しから戻る前に第2のオブジェクトに入る。第2のオブジェクトのタスクの実行の一部が第1のオブジェクトの第2のタスクの呼び出しを含む場合、スレッドは第1のオブジェクトに対する最初の呼び出しを完了し、その呼び出しから戻る前に第1のオブジェクトに再入する。
アプリケーションコンポーネントの同期およびアプリケーションメソッドのマルチスレッディングは複雑な問題である。例えば、様々なスレッドの実行を調整することは、特に2つのスレッドの命令が同じデータまたは資源を使用する必要がある場合に困難である可能性がある。第1のスレッド上の命令が、第2のスレッド上の命令によって必要とされるデータを変更する可能性がある。第2のスレッド上の命令が実行される前にそのデータが変更される場合、そのデータはプログラムの実行においてエラーを発生させる可能性がある。従来のアプリケーションはコンポーネントの同期およびマルチスレッディングを必要とすることから、Java(登録商標)式の同期されたメソッドおよびステートメント、共通言語ランタイム(CLR)、同期コンテキスト、アパートメントスレッディング、およびレンタルスレッディングを含む種々の従来のスレッディングモデルが使用されてきた。かかるモデルの使用は、複数のメソッドのスレッドを適切に扱うためにアプリケーションのプログラミングにおいて複雑なロジックを含むことを必要とする。従来のアプリケーションと共にこれらのモデルを使用する場合、同時処理はアプリケーションの特定の部分に設計される必要があり、デッドロックに対する正当性および競合条件に関して試験される必要がある。
かかる従来のモデルは、それらのコンポーネントによって受け取られたデータに基づいて、もしくはアプリケーションのその他の関連するコンポーネントによって動的に生成または再構成される多くのコンポーネントによってアプリケーションが構成される動的に構成されるアプリケーションフレームワークを用いる場合、もし機能したとしてもあまり有効ではない。かかる従来の方法はマルチスレッド化されたシステムがアプリケーションの特定の領域に区分化されることを強いるため、このことは問題である。かかる動的に生成および再構成されるアプリケーションのために、アプリケーションコンポーネントが従来のスレッディングモデルに関連するような複雑なスレッド処理ロジックなしに記述されることが必要である。
これらおよびその他を考慮に入れて本発明がなされた。
この概要は、「発明を実施するための最良の形態」において以下でさらに説明される簡素化された形態の概念の選択を導入するために提供される。この「課題を解決するための手段」は、特許請求の範囲に記載された対象の重要な特徴または本質的な特徴を特定するように意図されておらず、特許請求の範囲に記載された対象の範囲を決定する助けとして使用されるように意図されてもいない。
本発明の実施形態は、アプリケーションのコンポーネントを同時処理領域と呼ばれる別個の領域に分割することを提供することによって上述のおよびその他の問題を解決する。計算コストが高い低速なまたは実行に時間がかかるメソッドは、かかる領域内に配置されることができ、したがって関連するアプリケーションをエンドユーザに対して応答性が良好な状態に保つ。本発明の一態様によれば、所与の同時処理領域は、その部分内に同期およびスレッドの隔離を行うための、ならびにデータ駆動型の動的に構成および再構成されるアプリケーションにおけるその他のそのような部分との同時処理を提供するための、ランタイムオブジェクトの部分である。
本発明の一態様によれば、ランタイムで、所与のデータ駆動型の動的に構成および再構成されるアプリケーションは1つまたは複数の同時処理領域を含む。第1の同時処理領域は主同時処理領域である。主同時処理領域は、アプリケーションのユーザインターフェースコンポーネントを含み、アプリケーションの起動中にユーザインターフェースの作成を管理する。アプリケーションに含まれる追加的な同時処理領域は副同時処理領域である。副同時処理領域は、その副同時処理領域の親同時処理領域として機能する別の同時処理領域によって作成および処理される。同時処理領域は所与のアプリケーションにおいて同時処理が必要なときにいつでも使用されることができ、各同時処理領域は主アプリケーションのためのタスクを実行し、必要に応じてその結果を別の同時処理領域に対して発行する。
本発明の特定の態様によれば、ソフトウェアアプリケーションのコンポーネントの処理を同期する方法、システム、およびコンピュータ製品が提供される。この態様によれば、ソフトウェアアプリケーションの少なくとも1つのシングルスレッドのオブジェクトを実行するように動作する単一の内部処理スレッドを含む第1の同時処理領域が提供される。第1の同時処理領域と関連する第1の境界オブジェクトが提供され、当該第1の同時処理領域はシングルスレッドのオブジェクトを対象とする第1の同時処理領域の外部にあるソフトウェアアプリケーションオブジェクトからの第1のワークアイテムを受け取るように動作する。第1の境界オブジェクトは、第1のワークアイテムをワークアイテムキューにポストするようにさらに動作する。同時処理領域に含まれる第1のスレッドディスパッチャオブジェクトが提供され、当該第1のスレッドディスパッチャオブジェクトはポストされた第1のワークアイテムをワークアイテムキューから取り出すように動作し、シングルスレッドのオブジェクトによる処理のために、ポストされた第1のワークアイテムをシングルスレッドのオブジェクトに渡すように動作する。シングルスレッドのオブジェクトは、ポストされた第1のワークアイテムを処理するように動作し、結果を第1の境界オブジェクトを介して外部オブジェクトに返すように動作する。
本発明を特徴付けるこれらのおよびその他の特徴および利点は、以下の詳細な説明を読むこと、および関連する図面を検討することから明らかとなるであろう。前述の概説的な説明および以下の詳細な説明の両方は説明的であるに過ぎず、特許請求の範囲に記載された本発明を限定しないことを理解されたい。
以下の詳細な説明において、その説明の一部を形成する添付の図面に対する参照が行われ、その図面において特定の実施形態または実施例が例として示される。複数の図を通じて同様の参照番号は同様のコンポーネント、エンティティ、および構成を示す。本発明の精神および範囲を逸脱することなしにこれらの実施形態が組み合わせられることができ、その他の実施形態が利用されることができ、構成の変更がなされることができる。したがって、以下の詳細な説明は限定的な意味に取られるべきではなく、本発明の範囲は添付の特許請求の範囲およびそれらの均等物によって定義される。
図1は、同時処理領域を実装するための好適なコンピューティング環境を示す。必須ではないが、本発明の一実施形態は、パーソナルコンピュータによって実行されるコンピュータが実行可能な命令との一般的な関連で説明される。概して、プログラムされた処理は、特定のタスクを実行する、または特定の抽象データ型を実装する。
システム100は、処理ユニット102と、システムメモリ104と、システムメモリ104の処理ユニット102への結合を含め種々のシステムコンポーネントを結合するシステムバス106とを含む。システムバス106は、各種のバスアーキテクチャのいずれかを使用したメモリバス、周辺バス、ならびにローカルバスを含む数種のバス構造のいずれであってもよい。システムメモリは、読み出し専用メモリ(ROM)108およびランダムアクセスメモリ(RAM)110を含む。コンピュータシステム100内の要素間で情報を転送することに役立つ基礎的なルーチンを含む基本入出力システム112(BIOS)は、ROM108に記憶される。
コンピュータシステム100は、ハードディスクからの読み出し、および当該ハードディスクに対する書き込みのためのハードディスクドライブ112と、リムーバブル磁気ディスク116からの読み出し、または当該磁気ディスクに対する書き込みのための磁気ディスクドライブ114と、CDROM、DVD、またはその他の光媒体などのリムーバブル光ディスク119からの読み出し、または当該光ディスクに対する書き込みのための光ディスクドライブ118とをさらに含む。ハードディスクドライブ112、磁気ディスクドライブ114、および光ディスクドライブ118は、それぞれハードディスクドライブインターフェース120、磁気ディスクドライブインターフェース122、および光ドライブインタ―フェース124によってシステムバス106に接続される。これらのドライブおよびこれらのドライブに関連するコンピュータ可読媒体は、コンピュータシステム100のためのコンピュータ可読命令、データ構造、プログラム、およびその他のデータの不揮発性の記憶を提供する。
本明細書で説明される環境例はハードディスク112、リムーバブル磁気ディスク116、およびリムーバブル光ディスク119を使用することができるが、データを記憶することができるその他の種類のコンピュータ可読媒体がシステム例100において使用されてよい。動作環境例において使用され得るこれらのその他の種類のコンピュータ可読媒体の例は、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAM)、および読み出し専用メモリ(ROM)を含む。オペレーティングシステム126、アプリケーションプログラム128、その他のプログラムモジュール130、およびプログラムデータ132を含む多くのプログラムモジュールが、ハードディスク112、磁気ディスク116、光ディスク119、ROM108、またはRAM110に記憶されることができる。
ユーザは、例えばキーボード134、マウス136、またはその他のポインティングデバイスなどの入力デバイスを介してコンピュータシステム100に命令および情報を入力することができる。その他の入力デバイスの例は、ツールバー、メニュー、タッチスクリーン、マイクロホン、ジョイスティック、ゲームパッド、ペン、衛星通信用パラボラアンテナ、およびスキャナを含む。これらのおよびその他の入力デバイスは、システムバス106に結合されたシリアルポートインターフェース140を介して処理ユニット102に接続されることが多い。しかしながら、これらの入力デバイスは、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などのその他のインターフェースによって接続されてもよい。LCDディスプレイ142またはその他の種類のディスプレイデバイスも、ビデオアダプタ144などのインターフェースを介してシステムバス106に接続される。ディスプレイ142に加えて、概してコンピュータシステムは、スピーカおよびプリンタなどのその他の周辺出力デバイス(図示せず)を含むことができる。
コンピュータシステム100は、リモートコンピュータ146などの1つまたは複数のリモートコンピュータへの論理接続を使用したネットワーク化された環境で動作することができる。リモートコンピュータ146は、コンピュータシステム、サーバ、ルータ、ネットワークPC、ピアデバイス、またはその他の一般的なネットワークノードであってよく、概してコンピュータシステム100に関して上述した要素の多くまたは全てを含む。ネットワーク接続は、ローカルエリアネットワーク(LAN)148および広域ネットワーク(WAN)150を含む。かかるネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
LANネットワーキング環境において使用される場合、コンピュータシステム100は、ネットワークインターフェースまたはアダプタ152を介してローカルネットワーク148に接続される。WANネットワーキング環境において使用される場合、概して、コンピュータシステム100は、モデム154、またはインターネットなどの広域ネットワーク150を介して通信を確立するためのその他の手段を含む。内蔵でも外付けでもよいモデム154は、シリアルポートインターフェース140を介してシステムバス106に接続される。ネットワーク化された環境において、コンピュータシステム100に関連して示されたプログラムモジュール、またはそれらのモジュールの一部は、リモートのメモリ記憶装置に記憶されることができる。図示されたネットワーク接続は例であり、コンピュータ間で通信リンクを確立するその他の手段が使用され得ることが理解されるであろう。
本明細書で説明される実施形態は、コンピューティングシステムにおける論理操作として実装されることができる。論理操作は、(1)コンピュータシステム上で動作する一連の、コンピュータによって実現されたステップまたはプログラムモジュールとして、および(2)コンピューティングシステム内で動作する相互接続された論理またはハードウェアモジュールとして実装されることができる。この実装は、特定のコンピューティングシステムの性能要件に応じた選択の問題である。したがって、本明細書で説明される実施形態を構成する論理操作は、処理、ステップ、またはタスクと呼ばれる。これらの処理、ステップ、およびタスクは、本明細書に添付された特許請求の範囲内で説明された本発明の精神および範囲を逸脱することなしに、ソフトウェア、ファームウェア、専用のデジタルロジック、およびそれらの任意の組合せで実装されることができる。このソフトウェア、ファームウェア、または同様の一連のコンピュータ命令は、コンピュータ可読記憶媒体上に符号化および記憶されることができ、コンピューティングデバイス間の伝送のために搬送波信号内に符号化されることもできる。
簡潔に上述したように、本発明の実施形態は、コンポーネントの部分内に同期およびスレッドの隔離を行うために、およびコンポーネントの部分の間の改善された同時並行処理を提供するためにソフトウェアアプリケーションのコンポーネントを別個の領域に分割する方法、システム、およびコンピュータ製品を対象とする。図2は、本発明の一実施形態による、複数のオブジェクトを同時に実行するように構成されたシステム例を示す。システム例200は、全て単一のスレッド202上で実行され、外部オブジェクト210と直接(例えば、または同期的に)通信しない1つまたは複数のシングルスレッドのオブジェクト203の集合(または部分)である同時処理領域201を含む。内部スレッド202は、同時処理領域201によって課されたロジックに従ってオブジェクト203を実行する。内部スレッド202は、同時処理領域201内のシングルスレッドのオブジェクト203のみを実行する。内部スレッド202は、いかなる外部オブジェクト210も実行しない。
一実施形態によれば、同一スレッドが同時処理領域201の存在期間中を通じて内部スレッド202として使用される必要はない。むしろ、内部スレッド202上でオブジェクトが実行される必要がない場合、内部スレッド202として機能するスレッドはスレッドプール(図示せず)に戻ることができる。スレッドが再び必要になった場合、新しいスレッドがスレッドプールから取り出されて内部スレッド202として動作する。別の実施形態によれば、シングルスレッドのオブジェクト203のうちの1つは、シングルスレッドのオブジェクト203が同じスレッド上で実行される必要があることを意味するスレッドアフィニティを有する。この実施形態によれば、同一スレッドが同時処理領域201の存在期間中を通じて内部スレッド202として機能する。一実施形態によれば、本明細書でより詳細に説明される副スレッド204もスレッドプールから割り当てられる。
引き続き図2を参照すると、システム200は、少なくとも1つの副スレッド204および少なくとも1つの外部オブジェクト210をさらに含む。外部オブジェクト210の実施形態は、1つまたは複数の副スレッド204上で実行される任意のオブジェクトを含む。副スレッド204は、関連するアプリケーションにおいて実行される内部スレッド202と異なる任意のスレッドを含む。上述のように、図2に示された同時処理領域の例201は、内部スレッド202および複数のシングルスレッドのオブジェクト203を含む。これらのシングルスレッドのオブジェクト203は、内部スレッド202のみを用いて実行される。
同時処理領域201内のオブジェクト203は、プログラム中の残りの副スレッド204および外部オブジェクト210から隔離される。副スレッド204は、同時処理領域201内に含まれるいかなるシングルスレッドのオブジェクト203も実行しない。各外部オブジェクト210は、副スレッド204のうちの1つまたは複数上で実行されるように構成される。外部オブジェクト210は、同時処理領域201内のシングルスレッドのオブジェクト203と非同期的に通信する。通信は、オブジェクト間のデータの受け渡し、またはあるオブジェクトによる別のオブジェクトのメソッド(例えば、またはタスク)の呼び出しを含む。
同時処理領域201の境界をまたぐ非同期的な通信は、境界オブジェクト207の使用を介して実現される。各同時処理領域201は、1つまたは複数の境界オブジェクト207と関連付けられる。これらの境界オブジェクト207は、同時処理領域201を取り囲む膜、または門の付いた壁とみなされることができる。境界オブジェクト207の例は、同時処理領域201間の、または同時処理領域201と外部オブジェクト210の間の独自のプロトコルを実行するデータコネクタおよびオブジェクトを含む。
同時処理領域201内のシングルスレッドのオブジェクト203は、1つまたは複数の境界オブジェクト207を使用して外部オブジェクト210と非同期的に通信する。シングルスレッドのオブジェクト203は、内部スレッド202を使用して境界オブジェクト207と通信する。次に、境界オブジェクト207は、1つまたは複数の副スレッド204を使用して外部オブジェクト210と通信する。それによって境界オブジェクト207は、同時処理領域201の境界をまたいで情報および呼び出しを渡す。別の実施形態によれば、1つの境界オブジェクト207は、外部オブジェクト210に情報を渡す前に、副スレッド204を使用して別の境界オブジェクト207と通信する。
境界オブジェクト207は、同時処理領域201の内部スレッド202と、各副スレッド204との間のインターフェースとして動作する。別の実施形態によれば、境界オブジェクト207は、副スレッド204を使用して外部オブジェクト210からの同時処理領域内へ向けた通信を受け取り、適切な内部オブジェクト203への通信をフィルタリングする。フィルタリング方法は、本明細書においてより詳細に説明される。別の実施形態によれば、境界オブジェクト207は、内部スレッド202を使用して内部オブジェクト203からの同時処理領域外へ向けた通信を受け取り、副スレッド204を使用して適切な外部オブジェクト210へ通信を伝達する。一実施形態によれば、境界オブジェクトは、内部スレッド上で外部オブジェクトを呼び出すことができるが、境界オブジェクトがそのような呼び出しを行うことには制限がある。つまり、境界オブジェクトが外部オブジェクトを呼び出すことを許可することは、そのような呼び出しを行うことによる際限のない遅延またはデッドロックを引き起こしてはならない。別の制限は外部オブジェクトが内部オブジェクトへの参照を保持することを防止し、このことによって外部オブジェクトの制御の下での同時処理領域の直接的な再入(reentrancy)を防ぐ。
そのスレッド上で第1のオブジェクトが実行されているスレッドが第2のオブジェクトに入って第2のオブジェクトのメソッドを実行する場合、同期的な通信が行われる。外部オブジェクト210は、同時処理領域201内のシングルスレッドのオブジェクト203と同期的に通信しない。したがって、外部オブジェクト210を実行する副スレッドは、同時処理領域201内のシングルスレッドのオブジェクト203を直接的に呼び出す、または当該シングルスレッドのオブジェクト203に入ることはない。
図3は、そのシステム内で同時処理領域301が外部オブジェクト310とインターフェースを取る別のシステム例300を示す。外部オブジェクト310と内部オブジェクト303の間の非同期的な通信の一例が示される。同時処理領域301は、内部スレッド302と、内部スレッド302上で実行されるように構成されたシングルスレッドのオブジェクト303と、外部オブジェクト310と通信するための境界オブジェクト307とを含む。このシステム300の別の実施形態は、複数の境界オブジェクト307と、複数のシングルスレッドのオブジェクト303とを含む。
一実施形態によれば、外部オブジェクト310は、2つ以上の副スレッド304上で実行されるように構成されたマルチスレッドのオブジェクト305を含む。ある副スレッド304A上で実行されるマルチスレッドのオブジェクト305のある部分305Aが示され、別の副スレッド304B上で実行されるマルチスレッドのオブジェクト305の別の部分305Bが示される。別の実施形態によれば、外部オブジェクト310は、複数のマルチスレッドのオブジェクト305、または1つの副スレッド304上で実行されるように構成されたシングルスレッドのオブジェクト(図示せず)を含む。
システム300における同時処理領域301は、ワークキュー308を保守する。ワークキュー308は、その構造にタスク(例えば、内部のシングルスレッドのオブジェクト303のメソッドの呼び出し、データの更新、およびその他の実行可能なメソッド)がポストされ(例えば、挿入され)、その構造からタスクが取り除かれる多要素データ構造である。一実施形態によれば、タスクはそれらのタスクがポストされたのと同じ順番でのみ、すなわちファーストイン、ファーストアウトの制約に従ってワークキュー308から取り除かれる。別の実施形態によれば、ワークキュー308にポストされたタスクは優先度を割り当てられ、各タスクはそのタスクの優先度に従って取り除かれる。
受信される通信は境界オブジェクト307によってワークキュー308にポストされる。これらのポストされた通信は、内部のシングルスレッドのオブジェクト303のタスク、または同時処理領域301に関連する境界オブジェクト307のタスクの実行の要求(例えば、呼び出しまたはコール)であるワークアイテム311を形成する。ワークアイテム311を形成する要求は、外部オブジェクト310によって、または別の境界オブジェクト307によって境界オブジェクト307に伝えられることができる。例えば、図3においては、矢印320で示されるように、外部オブジェクト310のマルチスレッドのオブジェクト305は、境界オブジェクト307にタスクを実行するように要求する。矢印325で示されるように、次に境界オブジェクト307は、当該タスクを含むワークアイテム311をワークキュー308の末尾にポストする。別の実施形態によれば、複数の境界オブジェクト307が同時処理領域301と関連付けられ、これらの境界オブジェクト307のうちの1つまたは複数はワークアイテム311をワークキュー308にポストすることができる。さらに別の実施形態によれば、内部のシングルスレッドのオブジェクト303は、タスクの実行を後に遅らせるために、ワークアイテム311をワークキュー308にポストするように境界オブジェクト307に要求する。
一実施形態によれば、新しいタスクをワークキュー308にポストする準備をする場合に資源を確保するために、境界オブジェクト307はワークキュー308をチェックし、キューに入れられたワークアイテム311のいずれかが関連するタスクを含んでいるかどうかを判定する。関連するタスクが存在する場合、境界オブジェクト307は、全く新しいワークアイテム311として新しいタスクをポストするのではなく、新しいタスクを既にキューに入れられている関連するタスクにサブタスクとして選択的にバンドルすることができる。
引き続き図3を参照すると、一実施形態によれば、同時処理領域301は、ワークキュー308からのワークアイテム311を処理のためにシングルスレッドのオブジェクト303にディスパッチするディスパッチャ309を含む。ディスパッチャ309は、内部スレッド302を用いてワークアイテム311をワークキュー308から取り除き、内部スレッド302上で実行するために各ワークアイテム311をディスパッチする。ディスパッチャ309は、ワークアイテム311に含まれるタスクを呼び出す。例えば、図3においては、矢印330で示されたように、ディスパッチャ309はワークキュー308からのワークアイテム311をディスパッチする。矢印335で示されたように、次にワークアイテム311は内部スレッド302上で実行される。
一実施形態によれば、ワークアイテム311をワークキュー308にポストすることが、ディスパッチャ309を強制的に動作させることはない。むしろ、ワークアイテム311の実行は、同時処理領域301の最も高レベルのサイクルのロジックによって指示された時点まで延期される。一旦ワークアイテム311がワークキュー308にポストされると、内部スレッド302は、同時処理領域301の次の適切なサイクルにおいて、ディスパッチャ309によって決定されたように要求されたタスクを実行する。したがって、外部オブジェクト310は、いつワークアイテム311が取り除かれるのか、ひいてはいつ内部のシングルスレッドのオブジェクト303のタスクが呼び出され、実行されるのかを決定しない。同様に、外部オブジェクト310は、いつ境界オブジェクト307が同時処理領域301の内部スレッド302上でタスクを実行するのかを決定しない。
一旦タスクがディスパッチされ、完了されると、同時処理領域外へ向けた結果がコールバックとして境界オブジェクト307に渡される。次に、境界オブジェクト307は、当該コールバックを、当該結果を達成したタスクを呼び出したワークアイテム311を最初にポストした外部オブジェクト310に伝える。コールバックの例は、データ、タスクが完了したことを示すフラグ、メソッドの呼び出しなどを含む。
図4は、内部のシングルスレッドのオブジェクトと、外部オブジェクトとの間の非同期的な通信を示す。本発明の一実施形態によれば、外部オブジェクト401と、内部のシングルスレッドのオブジェクト409との間の非同期的な通信の間に行われる一連の通信400が示される。最初に、外部オブジェクト401が、境界オブジェクト403と通信する402。概して、この通信402は、同時処理領域(図示せず)と関連するタスクのうちの1つまたは複数を呼び出す呼び出しまたは要求の形態である。要求されたタスクは実際にはシングルスレッドのオブジェクト409のタスクであるが、外部オブジェクト401は、タスクを同時処理領域または境界オブジェクト403と関連付けるだけである。
次に、境界オブジェクト403が、ワークキュー405と通信する404。概して、この通信404は、ワークアイテム(図示せず)をワークキュー405にポストすることを含む。次に、ワークキュー405が、ディスパッチャ407と通信する406。概して、この通信406は、ディスパッチャ407がワークキュー405上のポストされた各ワークアイテムを逐次的にディスパッチすることを含む。最後に、ディスパッチャ407が、そのオブジェクトのタスクが呼び出されている内部のシングルスレッドのオブジェクト409と通信する408。概して、この通信408は、内部のシングルスレッドのオブジェクト409のタスクの呼び出しを含む。別の実施形態では、外部オブジェクト401は同時処理領域の別の境界オブジェクト(図示せず)と通信している。
図2〜4に関連して上述した同時処理領域の境界をまたぐ非同期的な通信は、「背景技術」の節で上述した再入の問題から内部のシングルスレッドのオブジェクトを保護する。理解されるように、内部的に制御された再入は、同時処理領域の最も高レベルのロジックの制御下のオブジェクト(例えば、内部のシングルスレッドのオブジェクト、または境界オブジェクト)が内部スレッドに、同様に最も高レベルのロジックの制御下にある別のオブジェクトへ再入するように命令する場合に起こる。外部的に制御された再入は、同時処理領域の最も高レベルのロジックの制御下にないオブジェクト(例えば、外部オブジェクト)が内部スレッドに、最も高レベルのロジックの制御下にあるオブジェクトへ再入するように命令する場合に起こる。内部的に引き起こされる再入は、内部オブジェクトがそのオブジェクト自体に、または同じ同時処理領域内の別のオブジェクトに再入する場合に起こる。外部的に引き起こされる再入は、外部オブジェクトによって生起されたイベントが再入に影響を与え、再入の制御を同時処理領域の内部オブジェクトにおいて集合的に具現化されたロジックから事実上切り離す場合に起こる。結果は、非決定性(non−deterministic reentrancy)の再入である。
再び図3を参照すると、同時処理領域301の境界をまたがる非同期的な通信のみを許可することは、内部のシングルスレッドのオブジェクト303を外部的に制御された再入から保護する。例えば、内部のシングルスレッドのオブジェクト303の実行が外部オブジェクト310のタスクの呼び出しを含む場合、内部スレッド302は、同時処理領域301に関連する境界オブジェクト307のうちの1つに入り、外部オブジェクト310のタスクの実行を要求する役割を持つタスクを呼び出すことになる。次に、内部スレッド302は、内部のシングルスレッドのオブジェクト303のタスクの実行、またはワークキュー308からのディスパッチされたワークアイテム311の実行に戻ることになる。内部スレッド302は同時処理領域301を離れて外部オブジェクト310に入ることはないため、内部スレッド302は外部オブジェクト310の制御下に入ることはない。
さらに、内部スレッド302が外部オブジェクト310のタスクの実行を許可される場合、およびそのタスクの実行が内部のシングルスレッドのオブジェクト303の別のタスクの呼び出しを含むとした場合、内部スレッド302は同時処理領域301への再入を許可されない。より正確に言えば、内部スレッド302は同時処理領域301の境界オブジェクト307に入ってワークアイテム311をポストする役割を持つタスクを呼び出す。代替として、上述のように、ある制約の下で境界オブジェクトはタスクの呼び出しのために内部スレッド上で外部オブジェクトを呼び出すことができる。タスクの呼び出しの後、内部スレッド302は外部オブジェクト310のタスクの実行に戻り、引き続いて内部のシングルスレッドのオブジェクト303の初めの元のタスクの実行に戻る。換言すると、内部スレッド302は、初めのタスクの実行が完了するまで、および同時処理領域301のディスパッチャ309によって外部オブジェクト310による別のタスクの呼び出しを実行するように指示されるまで、外部オブジェクト310による別のタスクの呼び出しを実行しない。
ここで図5および6を参照すると、データソースを含む外部オブジェクトの例を用いた本発明の実施形態が説明される。図5は、同時処理領域501およびデータソース512を含むシステム500を示し、図6は同時処理領域501の内部スレッド502と、データソース512の副スレッド504との間のインターフェースを示す処理フローチャート600を示す。一実施形態において、副スレッド504は複数の副スレッド504を含む。同時処理領域501はシングルスレッドのオブジェクト503と、ディスパッチャ509とを含み、境界オブジェクト507と関連付けられる。同時処理領域501は、同時処理領域501の内部スレッド502上で実行されるべき未実行のタスクを示すワークキュー508を保守する。一実施形態において、データソース512はデータベースである。別の実施形態において、データソース512はネットワークである。
内部スレッド502および副スレッド504の実行経路が両図に示される。図5において、破線矢印は内部スレッド502上で行われるタスクの実行を示し、実線矢印は副スレッド504のうちの1つまたは複数の上で行われるタスクの実行を示す。破線矢印および実線矢印を参照する番号は、図6に関して実行されている処理またはタスクに対応し、図6はそのスレッド上でそのタスクが実行されるスレッドに沿って配置された各タスクを示す。
引き続き図5および6を参照すると、方法は開始ブロック601で始まり、その処理においてシングルスレッドのオブジェクト503が境界オブジェクト507にデータソース512に関連するタスクを呼び出すように要求する処理602に進む。この要求は、同時処理領域501の内部スレッド502上で実行される。処理603において、ディスパッチャ509は、ワークキュー508を介して各ワークアイテム511を順序付け、それらをディスパッチする。一実施形態によれば、ワークアイテム511は、それらのワークアイテムがワークキュー508にポストされた順序で、内部スレッド502を用いてディスパッチされる。例えば、新しいワークアイテム511がその間に追加されないと仮定して、ディスパッチャ509はワークアイテム1から順序付けを開始し、ワークアイテム7で順序付けを完了する。ワークアイテム7の後に任意の新しいワークアイテム511が追加される。別の実施形態によれば、ワークアイテム511は、割り当てられた優先度値に従ってディスパッチされる。
メソッド602はメソッド611にも至り、メソッド611は操作602と同時に実行される。メソッド611において、境界オブジェクト507はデータソース512に関連するタスクを呼び出す。呼び出しは副スレッド504のうちの1つの上で実行される。次に、方法はその処理において副スレッド504のうちの1つまたは複数上でデータソース512のタスクが実行される処理612に進む。次に、処理613はデータベース512が実行結果をコールバックとして境界オブジェクト507に返すことを含む。結果の伝達は、副スレッド504のうちの1つまたは複数上で行われる。次に、処理614において、境界オブジェクト507は、コールバックをワークアイテム511としてワークキュー508にポストする。ポストは、副スレッド504のうちの1つまたは複数上で実行される。
処理614から、方法は処理604に進む。同様に処理603も処理604に進む。処理604は、処理603においてワークキュー508内のワークアイテム511を逐次的に実行していたディスパッチャ509が、処理614において境界オブジェクト507によって追加されたコールバックワークアイテム511に到達した場合に行われる。ディスパッチャ509は、内部スレッド502を使用してコールバックをディスパッチする。一旦コールバックがディスパッチされてしまうと、処理605において、ディスパッチャ509はワークキュー508内の各ワークアイテム511を逐次的にディスパッチし続ける。606において方法は終了する。
ここで図7および8を参照すると、第2の同時処理領域を含む外部オブジェクトの例を用いた本発明の実施形態が説明される。図7は、第1および第2の同時処理領域701、721をそれぞれ含むシステム700を示し、図8は、そのフローチャートにおいて第1の同時処理領域701が第2の同時処理領域721とインターフェースを取る処理フローチャート800を示す。各同時処理領域701、721は、内部スレッド702、722と、シングルスレッドのオブジェクト703、723と、ディスパッチャ709、729とをそれぞれ含む。各同時処理領域701、721はそれぞれ、境界オブジェクト707、727と関連付けられ、内部スレッド702、722上で実行されるべき未実行のワークアイテム711、731を示すワークキュー708、728を保守する。図7において、破線矢印の第1の組は内部スレッド702上で行われるタスクの実行を示し、実線矢印の組は副スレッド704のうちの1つまたは複数上で行われるタスクの実行を示し、破線矢印の第2の組は第2の内部スレッド722上で行われるタスクの実行を示す。第1の同時処理領域701と第2の同時処理領域721の間の通信に関わる種々の処理を実行するこれらの破線矢印および実線矢印が示される。これらの矢印を参照する参照番号は、図8に関して実行されている処理またはタスクに対応する。
引き続き図7および8を参照すると、方法は開始ブロック801で始まり、処理802および822の両方に進む。処理822は、第2の同時処理領域721のディスパッチャ729が内部スレッド722を使用してワークキュー728上の各ワークアイテム731を逐次的にディスパッチすることを含む。処理802は処理822と同時に実行される。処理802において、第1の同時処理領域701のシングルスレッドのオブジェクト703は、第2の同時処理領域721のオブジェクトのうちの1つからタスクを呼び出すように境界オブジェクト707に要求する。一実施形態において、要求されたタスクは、第2の同時処理領域721のシングルスレッドのオブジェクト723のうちの1つのタスクである。別の実施形態において、要求されたタスクは、第2の同時処理領域721と関連する境界オブジェクト727のうちの1つのタスクである。
処理802から、方法は処理803および812の両方に進む。処理803において、第1の同時処理領域701のディスパッチャ709は、ワークキュー708上の各ワークアイテム711を逐次的にディスパッチする。処理812において、第1の同時処理領域701の境界オブジェクト707は、副スレッド704のうちの1つまたは複数を使用して第2の同時処理領域721の境界オブジェクト727と通信する。通信はタスクを呼び出す要求を含む。次に、処理813において、第2の境界オブジェクト727は、要求されたタスクをワークアイテム731としてワークキュー728にポストする。ポストは、副スレッド704のうちの1つまたは複数を使用して実行される。
処理813および処理822の両方は、処理823に至る。処理823において、ディスパッチャ729は、要求されたタスクを含むワークアイテム731に到達し、それをディスパッチする。このディスパッチは、第2の同時処理領域721の内部スレッド722上で実行される。次に、処理824において、タスクは第1の同時処理領域701内のシングルスレッドのオブジェクト703に対するコールバックとして実行される。ここで、方法は再び分岐し、処理825および814の両方に進む。処理825において、ディスパッチャ729は、ワークキュー728上の各ワークアイテム731を逐次的にディスパッチし続ける。
処理814は処理825と同時に行われる。処理814において、第2の同時処理領域721の境界オブジェクト727は、1つまたは複数の副スレッド704を使用して第1の同時処理領域701の境界オブジェクト707に、コールバックをワークアイテム711としてワークキュー708へポストするように要求する。次に、処理815において、境界オブジェクト707は、コールバックをワークキュー708にポストする。ポストは、副スレッド704のうちの1つまたは複数上で実行される。
処理804は、第1の同時処理領域701のディスパッチャ709がワークキュー708上のポストされたコールバックに到達した場合に行われる。ディスパッチャ709は、第1の同時処理領域701の内部スレッド702を使用してコールバックをディスパッチする。処理805においてコールバックが実行される。次に、方法は、その処理においてディスパッチャ709がワークキュー708を介して順序付けを継続し、各ワークアイテム711を順にディスパッチする処理806に進む。806において方法は終了する。
システムの別の例(図示せず)は、互いにおよびその他の外部オブジェクトとインターフェースを取る3つ以上の同時処理領域を含む。かかるシステムは、実質的に本明細書で説明されたのと同様の処理に従って機能する。システムの各同時処理領域は、内部スレッドと、1つまたは複数のシングルスレッドのオブジェクトと、ディスパッチャとを含む。各同時処理領域は、少なくとも1つの境界オブジェクトと関連付けられ、ワークキューを保守する。同時処理領域の境界をまたがる全ての通信は非同期的である(例えば、それぞれの境界オブジェクト、ワークキュー、およびディスパッチャを介してフィルタリングされる)。
上述の各種の実施形態は単に例として与えられるに過ぎず、本発明を限定するように解釈されるべきではない。当業者は、本明細書で示され、説明された実施形態およびアプリケーションの例に従うことなしに、ならびに添付の特許請求の範囲に記載された本発明の真の精神および範囲を逸脱することなしに本発明に対してなされ得る種々の修正および変更を容易に理解するであろう。
その環境内で本発明が実施され得る好適なコンピューティング環境を示す図である。 本発明の一実施形態による、複数のオブジェクトを同時に実行するように構成されたシステム例を示す図である。 本発明の一実施形態による、複数のオブジェクトを同時に実行するように構成された別のシステム例を示す図である。 内部のシングルスレッドのオブジェクトと、外部オブジェクトとの間の非同期的な通信を示す図である。 同時処理領域がデータベースとインターフェースを取る場合の実行経路の例を示す図である。 そのフローチャートにおいて第1の同時処理領域がデータベースとインターフェースを取る処理フローチャートである。 第1の同時処理領域が第2の同時処理領域とインターフェースを取る場合の実行経路の例を示す図である。 そのフローチャートにおいて第1の同時処理領域が第2の同時処理領域とインターフェースを取る処理フローチャートである。

Claims (20)

  1. ソフトウェアアプリケーションの複数のコンポーネントの処理を同期させるシステムであって、
    前記ソフトウェアアプリケーションの少なくとも1つのシングルスレッドのオブジェクトを実行するように動作する単一の内部処理スレッドを含む第1の同時処理領域と、
    前記第1の同時処理領域の外部にあるソフトウェアアプリケーションのオブジェクトから第1のワークアイテムを受け取るように動作し、前記第1のワークアイテムをワークアイテムキューにポストするように動作する、前記第1の同時処理領域と関連する第1の境界オブジェクトであって、前記第1のワークアイテムは前記シングルスレッドのオブジェクトを対象とする、第1の境界オブジェクトと、
    前記ポストされた第1のワークアイテムを前記ワークアイテムキューから取り出し、前記シングルスレッドのオブジェクトによる処理のために、前記ポストされた第1のワークアイテムを前記シングルスレッドのオブジェクトに渡すように動作する、同時処理領域に含まれる第1のスレッドディスパッチャオブジェクトと
    を含み、前記シングルスレッドのオブジェクトは、前記ポストされた第1のワークアイテムを処理し、結果を前記第1の境界オブジェクトを介して前記外部オブジェクトに返すように動作することを特徴とするシステム。
  2. 前記第1のスレッドディスパッチャオブジェクトは、前記シングルスレッドのオブジェクトが前記ポストされた第1のワークアイテムの処理からの結果を前記第1の境界オブジェクトを介して前記外部オブジェクトに返すまで、前記シングルスレッドのオブジェクトを対象とするポストされた第2のワークアイテムを前記シングルスレッドのオブジェクトに与えないでおくようにさらに動作することを特徴とする請求項1に記載のシステム。
  3. 前記外部オブジェクトは副同時処理領域を含み、前記副同時処理領域は前記副同時処理領域に含まれる少なくとも1つのシングルスレッドのオブジェクトを実行するように構成された単一の内部スレッドを含み、前記副同時処理領域が、前記副同時処理領域に含まれる前記シングルスレッドのオブジェクトによる処理のために前記第1の境界オブジェクトを介して前記シングルスレッドのオブジェクトから前記結果を受け取るように動作する副同時処理領域境界オブジェクトに関連付けられることを特徴とする請求項2に記載のシステム。
  4. ソフトウェアアプリケーションの複数のコンポーネントの処理を同期させる方法であって、
    第1のソフトウェアアプリケーションの1つのコンポーネントによる処理のためにワークアイテムを受け取るステップと、
    前記ワークアイテムをワークアイテムキューにポストするステップと、
    前記第1のソフトウェアアプリケーションのコンポーネントが処理のために前記第1のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムを処理し終えているかどうかを判定するステップと、
    前記第1のソフトウェアアプリケーションのコンポーネントが処理のために前記第1のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムを処理し終えている場合に、前記ワークアイテムキューにポストされた前記ワークアイテムを取り出すステップと、
    前記取り出されたワークアイテムを処理のために前記ソフトウェアアプリケーションのコンポーネントに渡すステップと
    を含むことを特徴とする方法。
  5. 第1のソフトウェアアプリケーションのコンポーネントによる処理のためにワークアイテムを受け取るステップに先立って、前記第1のソフトウェアアプリケーションのコンポーネントを実行するように動作する単一の内部処理スレッドを含むソフトウェアアプリケーションのその他のコンポーネントとは別個の前記第1のソフトウェアアプリケーションのコンポーネントを同時処理領域内にインスタンス化することを特徴とする請求項4に記載の方法。
  6. 第1のソフトウェアアプリケーションのコンポーネントによる処理のためにワークアイテムを受け取るステップは、前記ワークアイテムを前記同時処理領域の外にある前記ソフトウェアアプリケーションのオブジェクトから前記同時処理領域に関連する境界オブジェクトで受け取るサブステップを含み、前記ワークアイテムは前記第1のソフトウェアアプリケーションのコンポーネントを対象とし、
    前記ワークアイテムをワークアイテムキューにポストするステップは、前記第1のソフトウェアアプリケーションのコンポーネントによる後続の処理のために、前記境界オブジェクトに前記ワークアイテムをワークアイテムキューにポストさせるサブステップを含むことを特徴とする請求項5に記載の方法。
  7. 前記第1のソフトウェアアプリケーションのコンポーネントが処理のために前記第1のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムを処理し終えているかどうかを判定するステップは、前記同時処理領域に提供されたディスパッチャオブジェクトが前記第1のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムからの結果が前記第1のソフトウェアアプリケーションのコンポーネントから前記境界オブジェクトに渡されたことを知らされたかどうかを判定するサブステップを含むことを特徴とする請求項6に記載の方法。
  8. 前記ワークアイテムキューにポストされた前記ワークアイテムを取り出すステップは、前記ディスパッチャオブジェクトに、前記第1のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムからの結果が前記第1のソフトウェアアプリケーションのコンポーネントから前記境界オブジェクトに渡されたことを知らされたことに応答して前記ワークアイテムキューにポストされた前記ワークアイテムを取り出させるサブステップを含むことを特徴とする請求項7に記載の方法。
  9. 取り出されたワークアイテムを処理のために前記ソフトウェアアプリケーションのコンポーネントに渡すステップは、前記ディスパッチャオブジェクトに、前記第1のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムからの結果が前記第1のソフトウェアアプリケーションのコンポーネントから前記境界オブジェクトに渡されたことを知らされたことに応答して前記取り出されたワークアイテムを処理のために前記ソフトウェアアプリケーションのコンポーネントへ渡させるサブステップを含むことを特徴とする請求項8に記載の方法。
  10. 前記ディスパッチャオブジェクトに、前記第1のソフトウェアアプリケーションのコンポーネントが前記取り出されたワークアイテムの処理からの結果を第1の境界オブジェクトを介して外部オブジェクトに返すまで、前記第1のソフトウェアアプリケーションのコンポーネントを対象とするポストされた第2のワークアイテムを前記第1のソフトウェアアプリケーションのコンポーネントに与えないようにさせるサブステップをさらに含むことを特徴とする請求項9に記載の方法。
  11. 前記ディスパッチャオブジェクトに、前記第1のソフトウェアアプリケーションのコンポーネントを対象とするポストされた第2のワークアイテムを前記第1のソフトウェアアプリケーションのコンポーネントに与えないようにさせるサブステップは、前記ディスパッチャオブジェクトが前記第1のソフトウェアアプリケーションのコンポーネントが前記ポストされた第2のワークアイテムを処理可能であると判定した場合に第1のソフトウェアアプリケーションのコンポーネントは処理のために前記ポストされた第2のワークアイテムを受け取ることのみが可能であるように、第1のソフトウェアコンポーネントが前記ポストされた第2のワークアイテムを要求することを防止するサブステップを含むことを特徴とする請求項10に記載の方法。
  12. 前記ワークアイテムを前記同時処理領域の外にある前記ソフトウェアアプリケーションのオブジェクトから前記同時処理領域に関連する境界オブジェクトで受け取るサブステップは、ワークアイテムを副同時処理領域から前記境界オブジェクトで受け取るサブステップを含み、前記副同時処理領域は、前記副同時処理領域に含まれる第2のソフトウェアアプリケーションのコンポーネントを実行するように構成された単一の内部スレッドを含み、前記副同時処理領域が、前記第1の境界オブジェクトを介して前記第1のソフトウェアアプリケーションのコンポーネントから前記結果を受け取るように動作する副同時処理領域境界オブジェクトに関連付けられることを特徴とする請求項10に記載の方法。
  13. コンピュータによって実行される場合にシングルスレッドのオブジェクトおよびマルチスレッドのオブジェクトを同時に実行する方法を実行するコンピュータが実行可能な命令を含むコンピュータ可読媒体であって、
    データを同時に処理するように動作する複数のソフトウェアコンポーネントを含むソフトウェアアプリケーションを受け取るステップと、
    データを同時に処理するように動作する前記ソフトウェアコンポーネントのそれぞれを別個の同時処理領域に分離するステップと、
    前記別個の同時処理領域に含まれるソフトウェアコンポーネントのオブジェクトを対象とする任意のデータ呼び出しを受け取るために、各別個の同時処理領域に境界オブジェクトを関連付けるステップと、
    個々のソフトウェアコンポーネントのオブジェクトが前記個々のソフトウェアコンポーネントのオブジェクトに既に与えられているその他のデータ呼び出しの処理を完了した後でデータ呼び出しを前記個々のソフトウェアコンポーネントのオブジェクトに与えるために、前記別個の同時処理領域のそれぞれにディスパッチャオブジェクトを配置するステップと
    を含むことを特徴とするコンピュータ可読媒体。
  14. 第1の所与の同時処理領域において、前記第1の所与の同時処理領域の中にある単一の処理スレッドを使用して、前記ディスパッチャオブジェクトから受け取られたデータ呼び出しに応答して少なくとも1つのシングルスレッドのオブジェクトを実行することであって、前記単一の処理スレッドが前記第1の所与の同時処理領域の外にあるいかなる副スレッドからの直接的な呼び出しもなしに実行される、少なくとも1つのシングルスレッドのオブジェクトを実行することと、
    副処理スレッドを使用して所与の同時処理領域に含まれない少なくとも1つの外部オブジェクトを実行することであって、前記副処理スレッドが前記所与の同時処理領域内の前記単一の処理スレッドからの直接的な呼び出しなしに実行される、少なくとも1つの外部オブジェクトを実行することと
    をさらに含むことを特徴とする請求項13に記載のコンピュータ可読媒体。
  15. 前記第1の所与の同時処理領域に関連する境界オブジェクトを使用して、第1の所与の同時処理領域の内部スレッドの中にある前記単一の処理スレッドと、前記副処理スレッドとの間のインターフェースを取ることをさらに含むことを特徴とする請求項14に記載のコンピュータ可読媒体。
  16. 前記副処理スレッドは第2の所与の同時処理領域の中にある第2の単一の処理スレッドを含み、前記第2の単一の処理スレッドは前記第2の所与の同時処理領域に含まれるシングルスレッドのオブジェクトを実行するように構成され、前記第2の所与の同時処理領域は前記第1の所与の同時処理領域に関連する前記境界オブジェクトとインターフェースを取るための関連する境界オブジェクトを有することを特徴とする請求項15に記載のコンピュータ可読媒体。
  17. それぞれの境界オブジェクトに関連する個々のソフトウェアコンポーネントのオブジェクトを対象とするデータ呼び出しを保持するために各境界オブジェクトにワークキューを関連付けることをさらに含み、所与の境界オブジェクトに受け取られたデータ呼び出しが、所与の個々のソフトウェアコンポーネントのオブジェクトに与えられるために関連するディスパッチャオブジェクトによって取り出されるまで関連するワークキュー内に置かれることを特徴とする請求項16に記載のコンピュータ可読媒体。
  18. 前記第1の所与の同時処理領域に含まれる所与のソフトウェアコンポーネントのオブジェクトによる実行のために、データ呼び出しを前記第2の所与の同時処理領域に関連する前記境界オブジェクトを介して前記第2の所与の同時処理領域から前記第1の所与の同時処理領域に関連する前記境界オブジェクトで受け取ることをさらに含むことを特徴とする請求項17に記載のコンピュータ可読媒体。
  19. 前記第2の所与の同時処理領域からの前記データ呼び出しを前記第1の所与の同時処理領域に関連するワークキューに入れることをさらに含むことを特徴とする請求項18に記載のコンピュータ可読媒体。
  20. 前記第1の所与の同時処理領域に含まれる所与のソフトウェアコンポーネントのオブジェクトが全ての既に受け取られたデータ呼び出しの処理を完了している場合、前記第1の所与の同時処理領域に関連するディスパッチャオブジェクトに、前記第1の所与の同時処理領域に関連する前記ワークキューから前記第2の所与の同時処理領域からの前記データ呼び出しを取り出させ、前記第1の所与の同時処理領域に関連する前記ディスパッチャオブジェクトに、前記第2の所与の同時処理領域からの前記データ呼び出しを処理のために前記第1の所与の同時処理領域に含まれる前記所与のソフトウェアコンポーネントのオブジェクトに与えるようにさせることを特徴とする請求項19に記載のコンピュータ可読媒体。
JP2008508960A 2005-04-29 2006-04-20 同時処理領域を用いたマルチスレッディング Pending JP2008539517A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US67613705P 2005-04-29 2005-04-29
US70322005P 2005-07-28 2005-07-28
US11/360,454 US7581225B2 (en) 2005-04-29 2006-02-23 Multithreading with concurrency domains
PCT/US2006/015185 WO2006118826A2 (en) 2005-04-29 2006-04-20 Multithreading with concurrency domains

Publications (1)

Publication Number Publication Date
JP2008539517A true JP2008539517A (ja) 2008-11-13

Family

ID=37235938

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008508960A Pending JP2008539517A (ja) 2005-04-29 2006-04-20 同時処理領域を用いたマルチスレッディング

Country Status (5)

Country Link
US (1) US7581225B2 (ja)
EP (1) EP1875331A4 (ja)
JP (1) JP2008539517A (ja)
KR (1) KR20080005523A (ja)
WO (1) WO2006118826A2 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060245096A1 (en) * 2005-04-29 2006-11-02 Microsoft Corporation Application framework phasing model
US8418132B2 (en) * 2005-04-29 2013-04-09 Microsoft Corporation Application description language
US8132148B2 (en) 2005-04-29 2012-03-06 Microsoft Corporation XML application framework
US8275793B2 (en) * 2005-04-29 2012-09-25 Microsoft Corporation Transaction transforms
US7886269B2 (en) * 2005-04-29 2011-02-08 Microsoft Corporation XML application framework
US8171486B2 (en) * 2005-09-21 2012-05-01 Sap Ag Conditionally accessing instances of software components from an un-synchronized pool
DE102006014019A1 (de) * 2006-03-27 2007-10-11 Siemens Ag Verfahren zum Steuern der Zugriffe auf Ressourcen eines Computersystems
US7814243B2 (en) * 2007-06-01 2010-10-12 Sonics, Inc. Shared storage for multi-threaded ordered queues in an interconnect
US8239867B2 (en) * 2009-06-03 2012-08-07 Apple Inc. Method and apparatus for implementing atomic FIFO
US9239846B2 (en) 2012-04-23 2016-01-19 Google Inc. Sharing and synchronizing electronically stored files
US8949179B2 (en) 2012-04-23 2015-02-03 Google, Inc. Sharing and synchronizing electronically stored files
US9529818B2 (en) 2012-04-23 2016-12-27 Google Inc. Sharing and synchronizing electronically stored files
US9244934B2 (en) * 2012-04-23 2016-01-26 Google Inc. Sharing and synchronizing electronically stored files
US11048562B2 (en) * 2017-06-04 2021-06-29 Apple Inc. Multi-thread synchronization primitive

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2061117C (en) * 1991-12-02 1998-09-29 Neta J. Amit Apparatus and method for distributed program stack
US6721951B1 (en) 1996-04-15 2004-04-13 Microsoft Corporation Data transfer utilizing single functionally independent data transfer mechanism
US5951653A (en) * 1997-01-29 1999-09-14 Microsoft Corporation Method and system for coordinating access to objects of different thread types in a shared memory space
US6339775B1 (en) 1997-11-07 2002-01-15 Informatica Corporation Apparatus and method for performing data transformations in data warehousing
US5940828A (en) 1997-11-18 1999-08-17 International Business Machines Corporation Locking contention resolution for shared resources
US6083276A (en) * 1998-06-11 2000-07-04 Corel, Inc. Creating and configuring component-based applications using a text-based descriptive attribute grammar
US6205465B1 (en) * 1998-07-22 2001-03-20 Cisco Technology, Inc. Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information
US6256780B1 (en) 1998-09-10 2001-07-03 Microsoft Corp. Method and system for assembling software components
US6857008B1 (en) 2000-04-19 2005-02-15 Cisco Technology, Inc. Arrangement for accessing an IP-based messaging server by telephone for management of stored messages
US7287259B2 (en) 2000-04-24 2007-10-23 Microsoft Corporation Isolating assembly versions for binding to application programs
FR2810423A1 (fr) * 2000-06-16 2001-12-21 Suntech Systeme informatique modulaire et procede associe
US6670969B1 (en) * 2000-06-29 2003-12-30 Curl Corporation Interface frames for threads
US7131107B2 (en) 2000-07-03 2006-10-31 Oculus Technologies Corporation Method for mapping business processes using an emergent model on a computer network
JP3750504B2 (ja) 2000-08-09 2006-03-01 セイコーエプソン株式会社 データ更新方法および情報処理装置
US6795868B1 (en) 2000-08-31 2004-09-21 Data Junction Corp. System and method for event-driven data transformation
US20020065950A1 (en) 2000-09-26 2002-05-30 Katz James S. Device event handler
US6823518B1 (en) 2000-10-17 2004-11-23 Microsoft Corporation Threading and communication architecture for a graphical user interface
US7085773B2 (en) 2001-01-05 2006-08-01 Symyx Technologies, Inc. Laboratory database system and methods for combinatorial materials research
US7043481B2 (en) 2001-06-01 2006-05-09 Thought, Inc. System, method and software for creating, maintaining, navigating or manipulating complex data objects and their data relationships
US7032210B2 (en) 2001-11-11 2006-04-18 International Business Machines Corporation Method and system for generating program source code of a computer application from an information model
US20030135825A1 (en) 2001-12-05 2003-07-17 Matthew Gertner Dynamically generated mark-up based graphical user interfaced with an extensible application framework with links to enterprise resources
US7228326B2 (en) 2002-01-18 2007-06-05 Bea Systems, Inc. Systems and methods for application deployment
US7181744B2 (en) * 2002-10-24 2007-02-20 International Business Machines Corporation System and method for transferring data between virtual machines or other computer entities
US7222332B2 (en) * 2002-10-24 2007-05-22 International Business Machines Corporation Method and apparatus for overlay management within an integrated executable for a heterogeneous architecture
US20040083238A1 (en) 2002-10-24 2004-04-29 General Electric Company Method, system, and storage medium for integrating project management tools
US7779405B2 (en) * 2003-03-14 2010-08-17 At&T Intellectual Property I, L.P. Run-time determination of application delivery
US7496574B2 (en) 2003-05-01 2009-02-24 International Business Machines Corporation Managing locks and transactions
US7558841B2 (en) 2003-05-14 2009-07-07 Microsoft Corporation Method, system, and computer-readable medium for communicating results to a data query in a computer network
CA2476156A1 (en) 2003-07-30 2005-01-30 J2X Technologies Inc. System, computer product and method for enabling wireless data synchronization
US7194663B2 (en) 2003-11-18 2007-03-20 Honeywell International, Inc. Protective bus interface and method
US7383285B1 (en) 2005-03-08 2008-06-03 Unisys Corporation Method for exposing hierarchical table structures and relationships to OLE DB applications
US8275793B2 (en) 2005-04-29 2012-09-25 Microsoft Corporation Transaction transforms
US7886269B2 (en) 2005-04-29 2011-02-08 Microsoft Corporation XML application framework
US8418132B2 (en) 2005-04-29 2013-04-09 Microsoft Corporation Application description language
US8132148B2 (en) 2005-04-29 2012-03-06 Microsoft Corporation XML application framework
US20060245096A1 (en) 2005-04-29 2006-11-02 Microsoft Corporation Application framework phasing model

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN7012000453; Benedek,Z.: 'A Framework Built in .NET for Embedded and MobileNavigation Systems' .NET Technologies'2004 workshop proceedings , 2004 *

Also Published As

Publication number Publication date
US7581225B2 (en) 2009-08-25
KR20080005523A (ko) 2008-01-14
EP1875331A2 (en) 2008-01-09
EP1875331A4 (en) 2011-08-31
WO2006118826A3 (en) 2007-11-22
WO2006118826A2 (en) 2006-11-09
US20060248530A1 (en) 2006-11-02

Similar Documents

Publication Publication Date Title
JP2008539517A (ja) 同時処理領域を用いたマルチスレッディング
CN101248405B (zh) 使用并发域的多线程化
US9292347B2 (en) Status tool to expose metadata read and write queues
EP2504758B1 (en) Responsive user interface with background application logic
WO2021088419A1 (zh) 一种多业务请求进程调用fpga设备的方法及相关装置
US8689237B2 (en) Multi-lane concurrent bag for facilitating inter-thread communication
EP1788486B1 (en) Cooperative scheduling using coroutines and threads
US9658890B2 (en) Runtime agnostic representation of user code for execution with selected execution runtime
US8763012B2 (en) Scalable, parallel processing of messages while enforcing custom sequencing criteria
Fay-Wolfe et al. Real-time CORBA
Pyarali et al. Techniques for enhancing real-time CORBA quality of service
US20170192762A1 (en) Declarative programming model with a native programming language
US20140053157A1 (en) Asynchronous execution flow
Chrysanthakopoulos et al. An asynchronous messaging library for c
CN110413822B (zh) 离线图像结构化分析方法、装置、系统和存储介质
US20100306778A1 (en) Locality-based scheduling in continuation-based runtimes
US20140149391A1 (en) Parallel display of multiple query results
Cox-Buday Concurrency in Go: Tools and Techniques for Developers
Liu Simulus: easy breezy simulation in python
US10296378B2 (en) Efficient processor load balancing using predication
Gunarathne et al. BPEL-Mora: Lightweight Embeddable Extensible BPEL Engine
JP2021060707A (ja) 同期制御システムおよび同期制御方法
US7228494B2 (en) Methods and systems for providing navigation within an application
Balandin et al. Anonymous agents coordination in smart spaces
US9384063B2 (en) Eliding synchronization in a concurrent data structure

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120507

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120803

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121105

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121130

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20130129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130401

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20130402

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130402

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20130605

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130701

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20130705

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130719

RD15 Notification of revocation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7435

Effective date: 20130719

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130705

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130806

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131106

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140204

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20140307