(57)【要約】  ソフトウェアアプリケーションのコンポーネントを同時処理領域と呼ばれる別個の領域に分割する方法、システム、およびコンピュータ製品が提供される。計算コストが高い低速なまたは実行に時間がかかるメソッドは、かかる領域内に配置されることができ、したがって関連するアプリケーションをエンドユーザに対して応答性が良好な状態に保つ。本発明の一態様によれば、所与の同時処理領域は、その部分内に同期およびスレッドの隔離を行うための、ならびにデータ駆動型の動的に構成および再構成されるアプリケーションにおけるその他のそのような部分との同時処理を提供するための、ランタイムオブジェクトの部分である。
2008539517.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアアプリケーションの複数のコンポーネントの処理を同期させるシステムであって、
前記ソフトウェアアプリケーションの少なくとも１つのシングルスレッドのオブジェクトを実行するように動作する単一の内部処理スレッドを含む第１の同時処理領域と、
前記第１の同時処理領域の外部にあるソフトウェアアプリケーションのオブジェクトから第１のワークアイテムを受け取るように動作し、前記第１のワークアイテムをワークアイテムキューにポストするように動作する、前記第１の同時処理領域と関連する第１の境界オブジェクトであって、前記第１のワークアイテムは前記シングルスレッドのオブジェクトを対象とする、第１の境界オブジェクトと、
前記ポストされた第１のワークアイテムを前記ワークアイテムキューから取り出し、前記シングルスレッドのオブジェクトによる処理のために、前記ポストされた第１のワークアイテムを前記シングルスレッドのオブジェクトに渡すように動作する、同時処理領域に含まれる第１のスレッドディスパッチャオブジェクトと
を含み、前記シングルスレッドのオブジェクトは、前記ポストされた第１のワークアイテムを処理し、結果を前記第１の境界オブジェクトを介して前記外部オブジェクトに返すように動作することを特徴とするシステム。
【請求項２】
前記第１のスレッドディスパッチャオブジェクトは、前記シングルスレッドのオブジェクトが前記ポストされた第１のワークアイテムの処理からの結果を前記第１の境界オブジェクトを介して前記外部オブジェクトに返すまで、前記シングルスレッドのオブジェクトを対象とするポストされた第２のワークアイテムを前記シングルスレッドのオブジェクトに与えないでおくようにさらに動作することを特徴とする請求項１に記載のシステム。
【請求項３】
前記外部オブジェクトは副同時処理領域を含み、前記副同時処理領域は前記副同時処理領域に含まれる少なくとも１つのシングルスレッドのオブジェクトを実行するように構成された単一の内部スレッドを含み、前記副同時処理領域が、前記副同時処理領域に含まれる前記シングルスレッドのオブジェクトによる処理のために前記第１の境界オブジェクトを介して前記シングルスレッドのオブジェクトから前記結果を受け取るように動作する副同時処理領域境界オブジェクトに関連付けられることを特徴とする請求項２に記載のシステム。
【請求項４】
ソフトウェアアプリケーションの複数のコンポーネントの処理を同期させる方法であって、
第１のソフトウェアアプリケーションの１つのコンポーネントによる処理のためにワークアイテムを受け取るステップと、
前記ワークアイテムをワークアイテムキューにポストするステップと、
前記第１のソフトウェアアプリケーションのコンポーネントが処理のために前記第１のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムを処理し終えているかどうかを判定するステップと、
前記第１のソフトウェアアプリケーションのコンポーネントが処理のために前記第１のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムを処理し終えている場合に、前記ワークアイテムキューにポストされた前記ワークアイテムを取り出すステップと、
前記取り出されたワークアイテムを処理のために前記ソフトウェアアプリケーションのコンポーネントに渡すステップと
を含むことを特徴とする方法。
【請求項５】
第１のソフトウェアアプリケーションのコンポーネントによる処理のためにワークアイテムを受け取るステップに先立って、前記第１のソフトウェアアプリケーションのコンポーネントを実行するように動作する単一の内部処理スレッドを含むソフトウェアアプリケーションのその他のコンポーネントとは別個の前記第１のソフトウェアアプリケーションのコンポーネントを同時処理領域内にインスタンス化することを特徴とする請求項４に記載の方法。
【請求項６】
第１のソフトウェアアプリケーションのコンポーネントによる処理のためにワークアイテムを受け取るステップは、前記ワークアイテムを前記同時処理領域の外にある前記ソフトウェアアプリケーションのオブジェクトから前記同時処理領域に関連する境界オブジェクトで受け取るサブステップを含み、前記ワークアイテムは前記第１のソフトウェアアプリケーションのコンポーネントを対象とし、
前記ワークアイテムをワークアイテムキューにポストするステップは、前記第１のソフトウェアアプリケーションのコンポーネントによる後続の処理のために、前記境界オブジェクトに前記ワークアイテムをワークアイテムキューにポストさせるサブステップを含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記第１のソフトウェアアプリケーションのコンポーネントが処理のために前記第１のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムを処理し終えているかどうかを判定するステップは、前記同時処理領域に提供されたディスパッチャオブジェクトが前記第１のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムからの結果が前記第１のソフトウェアアプリケーションのコンポーネントから前記境界オブジェクトに渡されたことを知らされたかどうかを判定するサブステップを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記ワークアイテムキューにポストされた前記ワークアイテムを取り出すステップは、前記ディスパッチャオブジェクトに、前記第１のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムからの結果が前記第１のソフトウェアアプリケーションのコンポーネントから前記境界オブジェクトに渡されたことを知らされたことに応答して前記ワークアイテムキューにポストされた前記ワークアイテムを取り出させるサブステップを含むことを特徴とする請求項７に記載の方法。
【請求項９】
取り出されたワークアイテムを処理のために前記ソフトウェアアプリケーションのコンポーネントに渡すステップは、前記ディスパッチャオブジェクトに、前記第１のソフトウェアアプリケーションのコンポーネントに渡された全ての前のワークアイテムからの結果が前記第１のソフトウェアアプリケーションのコンポーネントから前記境界オブジェクトに渡されたことを知らされたことに応答して前記取り出されたワークアイテムを処理のために前記ソフトウェアアプリケーションのコンポーネントへ渡させるサブステップを含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記ディスパッチャオブジェクトに、前記第１のソフトウェアアプリケーションのコンポーネントが前記取り出されたワークアイテムの処理からの結果を第１の境界オブジェクトを介して外部オブジェクトに返すまで、前記第１のソフトウェアアプリケーションのコンポーネントを対象とするポストされた第２のワークアイテムを前記第１のソフトウェアアプリケーションのコンポーネントに与えないようにさせるサブステップをさらに含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記ディスパッチャオブジェクトに、前記第１のソフトウェアアプリケーションのコンポーネントを対象とするポストされた第２のワークアイテムを前記第１のソフトウェアアプリケーションのコンポーネントに与えないようにさせるサブステップは、前記ディスパッチャオブジェクトが前記第１のソフトウェアアプリケーションのコンポーネントが前記ポストされた第２のワークアイテムを処理可能であると判定した場合に第１のソフトウェアアプリケーションのコンポーネントは処理のために前記ポストされた第２のワークアイテムを受け取ることのみが可能であるように、第１のソフトウェアコンポーネントが前記ポストされた第２のワークアイテムを要求することを防止するサブステップを含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記ワークアイテムを前記同時処理領域の外にある前記ソフトウェアアプリケーションのオブジェクトから前記同時処理領域に関連する境界オブジェクトで受け取るサブステップは、ワークアイテムを副同時処理領域から前記境界オブジェクトで受け取るサブステップを含み、前記副同時処理領域は、前記副同時処理領域に含まれる第２のソフトウェアアプリケーションのコンポーネントを実行するように構成された単一の内部スレッドを含み、前記副同時処理領域が、前記第１の境界オブジェクトを介して前記第１のソフトウェアアプリケーションのコンポーネントから前記結果を受け取るように動作する副同時処理領域境界オブジェクトに関連付けられることを特徴とする請求項１０に記載の方法。
【請求項１３】
コンピュータによって実行される場合にシングルスレッドのオブジェクトおよびマルチスレッドのオブジェクトを同時に実行する方法を実行するコンピュータが実行可能な命令を含むコンピュータ可読媒体であって、
データを同時に処理するように動作する複数のソフトウェアコンポーネントを含むソフトウェアアプリケーションを受け取るステップと、
データを同時に処理するように動作する前記ソフトウェアコンポーネントのそれぞれを別個の同時処理領域に分離するステップと、
前記別個の同時処理領域に含まれるソフトウェアコンポーネントのオブジェクトを対象とする任意のデータ呼び出しを受け取るために、各別個の同時処理領域に境界オブジェクトを関連付けるステップと、
個々のソフトウェアコンポーネントのオブジェクトが前記個々のソフトウェアコンポーネントのオブジェクトに既に与えられているその他のデータ呼び出しの処理を完了した後でデータ呼び出しを前記個々のソフトウェアコンポーネントのオブジェクトに与えるために、前記別個の同時処理領域のそれぞれにディスパッチャオブジェクトを配置するステップと
を含むことを特徴とするコンピュータ可読媒体。
【請求項１４】
第１の所与の同時処理領域において、前記第１の所与の同時処理領域の中にある単一の処理スレッドを使用して、前記ディスパッチャオブジェクトから受け取られたデータ呼び出しに応答して少なくとも１つのシングルスレッドのオブジェクトを実行することであって、前記単一の処理スレッドが前記第１の所与の同時処理領域の外にあるいかなる副スレッドからの直接的な呼び出しもなしに実行される、少なくとも１つのシングルスレッドのオブジェクトを実行することと、
副処理スレッドを使用して所与の同時処理領域に含まれない少なくとも１つの外部オブジェクトを実行することであって、前記副処理スレッドが前記所与の同時処理領域内の前記単一の処理スレッドからの直接的な呼び出しなしに実行される、少なくとも１つの外部オブジェクトを実行することと
をさらに含むことを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記第１の所与の同時処理領域に関連する境界オブジェクトを使用して、第１の所与の同時処理領域の内部スレッドの中にある前記単一の処理スレッドと、前記副処理スレッドとの間のインターフェースを取ることをさらに含むことを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
前記副処理スレッドは第２の所与の同時処理領域の中にある第２の単一の処理スレッドを含み、前記第２の単一の処理スレッドは前記第２の所与の同時処理領域に含まれるシングルスレッドのオブジェクトを実行するように構成され、前記第２の所与の同時処理領域は前記第１の所与の同時処理領域に関連する前記境界オブジェクトとインターフェースを取るための関連する境界オブジェクトを有することを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
それぞれの境界オブジェクトに関連する個々のソフトウェアコンポーネントのオブジェクトを対象とするデータ呼び出しを保持するために各境界オブジェクトにワークキューを関連付けることをさらに含み、所与の境界オブジェクトに受け取られたデータ呼び出しが、所与の個々のソフトウェアコンポーネントのオブジェクトに与えられるために関連するディスパッチャオブジェクトによって取り出されるまで関連するワークキュー内に置かれることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
前記第１の所与の同時処理領域に含まれる所与のソフトウェアコンポーネントのオブジェクトによる実行のために、データ呼び出しを前記第２の所与の同時処理領域に関連する前記境界オブジェクトを介して前記第２の所与の同時処理領域から前記第１の所与の同時処理領域に関連する前記境界オブジェクトで受け取ることをさらに含むことを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記第２の所与の同時処理領域からの前記データ呼び出しを前記第１の所与の同時処理領域に関連するワークキューに入れることをさらに含むことを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記第１の所与の同時処理領域に含まれる所与のソフトウェアコンポーネントのオブジェクトが全ての既に受け取られたデータ呼び出しの処理を完了している場合、前記第１の所与の同時処理領域に関連するディスパッチャオブジェクトに、前記第１の所与の同時処理領域に関連する前記ワークキューから前記第２の所与の同時処理領域からの前記データ呼び出しを取り出させ、前記第１の所与の同時処理領域に関連する前記ディスパッチャオブジェクトに、前記第２の所与の同時処理領域からの前記データ呼び出しを処理のために前記第１の所与の同時処理領域に含まれる前記所与のソフトウェアコンポーネントのオブジェクトに与えるようにさせることを特徴とする請求項１９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同時処理領域を用いたマルチスレッディングに関する。
【背景技術】
【０００２】
コンピュータ時代の到来と共に、コンピュータユーザおよびソフトウェアユーザは、書くこと、計算すること、編成すること、プレゼンテーションを準備すること、電子メールを送信および受信すること、作曲をすることなどに役立つユーザフレンドリーなソフトウェアアプリケーションに慣れてしまった。例えば、現在の電子的な文書処理アプリケーションは、ユーザが様々な有用な文書を作成することを可能にする。現在の表計算アプリケーションは、ユーザがデータを入力し、操作し、編成することを可能にする。現在の電子的なスライドプレゼンテーションアプリケーションは、ユーザがテキスト、画像、データ、またはその他の有用なオブジェクトを含む様々なスライドプレゼンテーションを作成することを可能にする。
【０００３】
多くのそのようなアプリケーションは、所与のアプリケーションメソッド全体のうちの個々のメソッドを実行するために多くのアプリケーションコンポーネントが逐次的におよび／または同時に実行されるコンポーネントフレームワークに従って動作する。通常、同時的なコンポーネントメソッドは、様々なメソッドのマルチスレッディングを必要とする。つまり、同時並行処理をサポートするアプリケーションは、複数のメソッドのスレッドを使用する。そのようなアプリケーションの基本的な要件は、複数のスレッドを、スレッド間で共有される任意のデータに矛盾がないように同期させるアプリケーションの能力である。ソフトウェアにおける困難のある領域が、再入である。メソッドを同期することによってしばしば引き起こされる問題が、非決定性の再入である。概して、再入は、スレッドがネストされた呼び出しを行い、それによって最初の呼び出しを完了する前に同一のオブジェクトに再び入る場合に発生する。例えば、スレッドが第１のオブジェクトの第１のタスクに対する呼び出しを実行しており、その実行の一部として第２のオブジェクトのタスクを呼び出す場合、スレッドは第１のオブジェクトに対する呼び出しを完了し、その呼び出しから戻る前に第２のオブジェクトに入る。第２のオブジェクトのタスクの実行の一部が第１のオブジェクトの第２のタスクの呼び出しを含む場合、スレッドは第１のオブジェクトに対する最初の呼び出しを完了し、その呼び出しから戻る前に第１のオブジェクトに再入する。
【０００４】
アプリケーションコンポーネントの同期およびアプリケーションメソッドのマルチスレッディングは複雑な問題である。例えば、様々なスレッドの実行を調整することは、特に２つのスレッドの命令が同じデータまたは資源を使用する必要がある場合に困難である可能性がある。第１のスレッド上の命令が、第２のスレッド上の命令によって必要とされるデータを変更する可能性がある。第２のスレッド上の命令が実行される前にそのデータが変更される場合、そのデータはプログラムの実行においてエラーを発生させる可能性がある。従来のアプリケーションはコンポーネントの同期およびマルチスレッディングを必要とすることから、Ｊａｖａ（登録商標）式の同期されたメソッドおよびステートメント、共通言語ランタイム（ＣＬＲ）、同期コンテキスト、アパートメントスレッディング、およびレンタルスレッディングを含む種々の従来のスレッディングモデルが使用されてきた。かかるモデルの使用は、複数のメソッドのスレッドを適切に扱うためにアプリケーションのプログラミングにおいて複雑なロジックを含むことを必要とする。従来のアプリケーションと共にこれらのモデルを使用する場合、同時処理はアプリケーションの特定の部分に設計される必要があり、デッドロックに対する正当性および競合条件に関して試験される必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
かかる従来のモデルは、それらのコンポーネントによって受け取られたデータに基づいて、もしくはアプリケーションのその他の関連するコンポーネントによって動的に生成または再構成される多くのコンポーネントによってアプリケーションが構成される動的に構成されるアプリケーションフレームワークを用いる場合、もし機能したとしてもあまり有効ではない。かかる従来の方法はマルチスレッド化されたシステムがアプリケーションの特定の領域に区分化されることを強いるため、このことは問題である。かかる動的に生成および再構成されるアプリケーションのために、アプリケーションコンポーネントが従来のスレッディングモデルに関連するような複雑なスレッド処理ロジックなしに記述されることが必要である。
【課題を解決するための手段】
【０００６】
これらおよびその他を考慮に入れて本発明がなされた。
【０００７】
この概要は、「発明を実施するための最良の形態」において以下でさらに説明される簡素化された形態の概念の選択を導入するために提供される。この「課題を解決するための手段」は、特許請求の範囲に記載された対象の重要な特徴または本質的な特徴を特定するように意図されておらず、特許請求の範囲に記載された対象の範囲を決定する助けとして使用されるように意図されてもいない。
【０００８】
本発明の実施形態は、アプリケーションのコンポーネントを同時処理領域と呼ばれる別個の領域に分割することを提供することによって上述のおよびその他の問題を解決する。計算コストが高い低速なまたは実行に時間がかかるメソッドは、かかる領域内に配置されることができ、したがって関連するアプリケーションをエンドユーザに対して応答性が良好な状態に保つ。本発明の一態様によれば、所与の同時処理領域は、その部分内に同期およびスレッドの隔離を行うための、ならびにデータ駆動型の動的に構成および再構成されるアプリケーションにおけるその他のそのような部分との同時処理を提供するための、ランタイムオブジェクトの部分である。
【０００９】
本発明の一態様によれば、ランタイムで、所与のデータ駆動型の動的に構成および再構成されるアプリケーションは１つまたは複数の同時処理領域を含む。第１の同時処理領域は主同時処理領域である。主同時処理領域は、アプリケーションのユーザインターフェースコンポーネントを含み、アプリケーションの起動中にユーザインターフェースの作成を管理する。アプリケーションに含まれる追加的な同時処理領域は副同時処理領域である。副同時処理領域は、その副同時処理領域の親同時処理領域として機能する別の同時処理領域によって作成および処理される。同時処理領域は所与のアプリケーションにおいて同時処理が必要なときにいつでも使用されることができ、各同時処理領域は主アプリケーションのためのタスクを実行し、必要に応じてその結果を別の同時処理領域に対して発行する。
【００１０】
本発明の特定の態様によれば、ソフトウェアアプリケーションのコンポーネントの処理を同期する方法、システム、およびコンピュータ製品が提供される。この態様によれば、ソフトウェアアプリケーションの少なくとも１つのシングルスレッドのオブジェクトを実行するように動作する単一の内部処理スレッドを含む第１の同時処理領域が提供される。第１の同時処理領域と関連する第１の境界オブジェクトが提供され、当該第１の同時処理領域はシングルスレッドのオブジェクトを対象とする第１の同時処理領域の外部にあるソフトウェアアプリケーションオブジェクトからの第１のワークアイテムを受け取るように動作する。第１の境界オブジェクトは、第１のワークアイテムをワークアイテムキューにポストするようにさらに動作する。同時処理領域に含まれる第１のスレッドディスパッチャオブジェクトが提供され、当該第１のスレッドディスパッチャオブジェクトはポストされた第１のワークアイテムをワークアイテムキューから取り出すように動作し、シングルスレッドのオブジェクトによる処理のために、ポストされた第１のワークアイテムをシングルスレッドのオブジェクトに渡すように動作する。シングルスレッドのオブジェクトは、ポストされた第１のワークアイテムを処理するように動作し、結果を第１の境界オブジェクトを介して外部オブジェクトに返すように動作する。
【００１１】
本発明を特徴付けるこれらのおよびその他の特徴および利点は、以下の詳細な説明を読むこと、および関連する図面を検討することから明らかとなるであろう。前述の概説的な説明および以下の詳細な説明の両方は説明的であるに過ぎず、特許請求の範囲に記載された本発明を限定しないことを理解されたい。
【発明を実施するための最良の形態】
【００１２】
以下の詳細な説明において、その説明の一部を形成する添付の図面に対する参照が行われ、その図面において特定の実施形態または実施例が例として示される。複数の図を通じて同様の参照番号は同様のコンポーネント、エンティティ、および構成を示す。本発明の精神および範囲を逸脱することなしにこれらの実施形態が組み合わせられることができ、その他の実施形態が利用されることができ、構成の変更がなされることができる。したがって、以下の詳細な説明は限定的な意味に取られるべきではなく、本発明の範囲は添付の特許請求の範囲およびそれらの均等物によって定義される。
【００１３】
図１は、同時処理領域を実装するための好適なコンピューティング環境を示す。必須ではないが、本発明の一実施形態は、パーソナルコンピュータによって実行されるコンピュータが実行可能な命令との一般的な関連で説明される。概して、プログラムされた処理は、特定のタスクを実行する、または特定の抽象データ型を実装する。
【００１４】
システム１００は、処理ユニット１０２と、システムメモリ１０４と、システムメモリ１０４の処理ユニット１０２への結合を含め種々のシステムコンポーネントを結合するシステムバス１０６とを含む。システムバス１０６は、各種のバスアーキテクチャのいずれかを使用したメモリバス、周辺バス、ならびにローカルバスを含む数種のバス構造のいずれであってもよい。システムメモリは、読み出し専用メモリ（ＲＯＭ）１０８およびランダムアクセスメモリ（ＲＡＭ）１１０を含む。コンピュータシステム１００内の要素間で情報を転送することに役立つ基礎的なルーチンを含む基本入出力システム１１２（ＢＩＯＳ）は、ＲＯＭ１０８に記憶される。
【００１５】
コンピュータシステム１００は、ハードディスクからの読み出し、および当該ハードディスクに対する書き込みのためのハードディスクドライブ１１２と、リムーバブル磁気ディスク１１６からの読み出し、または当該磁気ディスクに対する書き込みのための磁気ディスクドライブ１１４と、ＣＤＲＯＭ、ＤＶＤ、またはその他の光媒体などのリムーバブル光ディスク１１９からの読み出し、または当該光ディスクに対する書き込みのための光ディスクドライブ１１８とをさらに含む。ハードディスクドライブ１１２、磁気ディスクドライブ１１４、および光ディスクドライブ１１８は、それぞれハードディスクドライブインターフェース１２０、磁気ディスクドライブインターフェース１２２、および光ドライブインタ―フェース１２４によってシステムバス１０６に接続される。これらのドライブおよびこれらのドライブに関連するコンピュータ可読媒体は、コンピュータシステム１００のためのコンピュータ可読命令、データ構造、プログラム、およびその他のデータの不揮発性の記憶を提供する。
【００１６】
本明細書で説明される環境例はハードディスク１１２、リムーバブル磁気ディスク１１６、およびリムーバブル光ディスク１１９を使用することができるが、データを記憶することができるその他の種類のコンピュータ可読媒体がシステム例１００において使用されてよい。動作環境例において使用され得るこれらのその他の種類のコンピュータ可読媒体の例は、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、および読み出し専用メモリ（ＲＯＭ）を含む。オペレーティングシステム１２６、アプリケーションプログラム１２８、その他のプログラムモジュール１３０、およびプログラムデータ１３２を含む多くのプログラムモジュールが、ハードディスク１１２、磁気ディスク１１６、光ディスク１１９、ＲＯＭ１０８、またはＲＡＭ１１０に記憶されることができる。
【００１７】
ユーザは、例えばキーボード１３４、マウス１３６、またはその他のポインティングデバイスなどの入力デバイスを介してコンピュータシステム１００に命令および情報を入力することができる。その他の入力デバイスの例は、ツールバー、メニュー、タッチスクリーン、マイクロホン、ジョイスティック、ゲームパッド、ペン、衛星通信用パラボラアンテナ、およびスキャナを含む。これらのおよびその他の入力デバイスは、システムバス１０６に結合されたシリアルポートインターフェース１４０を介して処理ユニット１０２に接続されることが多い。しかしながら、これらの入力デバイスは、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などのその他のインターフェースによって接続されてもよい。ＬＣＤディスプレイ１４２またはその他の種類のディスプレイデバイスも、ビデオアダプタ１４４などのインターフェースを介してシステムバス１０６に接続される。ディスプレイ１４２に加えて、概してコンピュータシステムは、スピーカおよびプリンタなどのその他の周辺出力デバイス（図示せず）を含むことができる。
【００１８】
コンピュータシステム１００は、リモートコンピュータ１４６などの１つまたは複数のリモートコンピュータへの論理接続を使用したネットワーク化された環境で動作することができる。リモートコンピュータ１４６は、コンピュータシステム、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードであってよく、概してコンピュータシステム１００に関して上述した要素の多くまたは全てを含む。ネットワーク接続は、ローカルエリアネットワーク（ＬＡＮ）１４８および広域ネットワーク（ＷＡＮ）１５０を含む。かかるネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００１９】
ＬＡＮネットワーキング環境において使用される場合、コンピュータシステム１００は、ネットワークインターフェースまたはアダプタ１５２を介してローカルネットワーク１４８に接続される。ＷＡＮネットワーキング環境において使用される場合、概して、コンピュータシステム１００は、モデム１５４、またはインターネットなどの広域ネットワーク１５０を介して通信を確立するためのその他の手段を含む。内蔵でも外付けでもよいモデム１５４は、シリアルポートインターフェース１４０を介してシステムバス１０６に接続される。ネットワーク化された環境において、コンピュータシステム１００に関連して示されたプログラムモジュール、またはそれらのモジュールの一部は、リモートのメモリ記憶装置に記憶されることができる。図示されたネットワーク接続は例であり、コンピュータ間で通信リンクを確立するその他の手段が使用され得ることが理解されるであろう。
【００２０】
本明細書で説明される実施形態は、コンピューティングシステムにおける論理操作として実装されることができる。論理操作は、（１）コンピュータシステム上で動作する一連の、コンピュータによって実現されたステップまたはプログラムモジュールとして、および（２）コンピューティングシステム内で動作する相互接続された論理またはハードウェアモジュールとして実装されることができる。この実装は、特定のコンピューティングシステムの性能要件に応じた選択の問題である。したがって、本明細書で説明される実施形態を構成する論理操作は、処理、ステップ、またはタスクと呼ばれる。これらの処理、ステップ、およびタスクは、本明細書に添付された特許請求の範囲内で説明された本発明の精神および範囲を逸脱することなしに、ソフトウェア、ファームウェア、専用のデジタルロジック、およびそれらの任意の組合せで実装されることができる。このソフトウェア、ファームウェア、または同様の一連のコンピュータ命令は、コンピュータ可読記憶媒体上に符号化および記憶されることができ、コンピューティングデバイス間の伝送のために搬送波信号内に符号化されることもできる。
【００２１】
簡潔に上述したように、本発明の実施形態は、コンポーネントの部分内に同期およびスレッドの隔離を行うために、およびコンポーネントの部分の間の改善された同時並行処理を提供するためにソフトウェアアプリケーションのコンポーネントを別個の領域に分割する方法、システム、およびコンピュータ製品を対象とする。図２は、本発明の一実施形態による、複数のオブジェクトを同時に実行するように構成されたシステム例を示す。システム例２００は、全て単一のスレッド２０２上で実行され、外部オブジェクト２１０と直接（例えば、または同期的に）通信しない１つまたは複数のシングルスレッドのオブジェクト２０３の集合（または部分）である同時処理領域２０１を含む。内部スレッド２０２は、同時処理領域２０１によって課されたロジックに従ってオブジェクト２０３を実行する。内部スレッド２０２は、同時処理領域２０１内のシングルスレッドのオブジェクト２０３のみを実行する。内部スレッド２０２は、いかなる外部オブジェクト２１０も実行しない。
【００２２】
一実施形態によれば、同一スレッドが同時処理領域２０１の存在期間中を通じて内部スレッド２０２として使用される必要はない。むしろ、内部スレッド２０２上でオブジェクトが実行される必要がない場合、内部スレッド２０２として機能するスレッドはスレッドプール（図示せず）に戻ることができる。スレッドが再び必要になった場合、新しいスレッドがスレッドプールから取り出されて内部スレッド２０２として動作する。別の実施形態によれば、シングルスレッドのオブジェクト２０３のうちの１つは、シングルスレッドのオブジェクト２０３が同じスレッド上で実行される必要があることを意味するスレッドアフィニティを有する。この実施形態によれば、同一スレッドが同時処理領域２０１の存在期間中を通じて内部スレッド２０２として機能する。一実施形態によれば、本明細書でより詳細に説明される副スレッド２０４もスレッドプールから割り当てられる。
【００２３】
引き続き図２を参照すると、システム２００は、少なくとも１つの副スレッド２０４および少なくとも１つの外部オブジェクト２１０をさらに含む。外部オブジェクト２１０の実施形態は、１つまたは複数の副スレッド２０４上で実行される任意のオブジェクトを含む。副スレッド２０４は、関連するアプリケーションにおいて実行される内部スレッド２０２と異なる任意のスレッドを含む。上述のように、図２に示された同時処理領域の例２０１は、内部スレッド２０２および複数のシングルスレッドのオブジェクト２０３を含む。これらのシングルスレッドのオブジェクト２０３は、内部スレッド２０２のみを用いて実行される。
【００２４】
同時処理領域２０１内のオブジェクト２０３は、プログラム中の残りの副スレッド２０４および外部オブジェクト２１０から隔離される。副スレッド２０４は、同時処理領域２０１内に含まれるいかなるシングルスレッドのオブジェクト２０３も実行しない。各外部オブジェクト２１０は、副スレッド２０４のうちの１つまたは複数上で実行されるように構成される。外部オブジェクト２１０は、同時処理領域２０１内のシングルスレッドのオブジェクト２０３と非同期的に通信する。通信は、オブジェクト間のデータの受け渡し、またはあるオブジェクトによる別のオブジェクトのメソッド（例えば、またはタスク）の呼び出しを含む。
【００２５】
同時処理領域２０１の境界をまたぐ非同期的な通信は、境界オブジェクト２０７の使用を介して実現される。各同時処理領域２０１は、１つまたは複数の境界オブジェクト２０７と関連付けられる。これらの境界オブジェクト２０７は、同時処理領域２０１を取り囲む膜、または門の付いた壁とみなされることができる。境界オブジェクト２０７の例は、同時処理領域２０１間の、または同時処理領域２０１と外部オブジェクト２１０の間の独自のプロトコルを実行するデータコネクタおよびオブジェクトを含む。
【００２６】
同時処理領域２０１内のシングルスレッドのオブジェクト２０３は、１つまたは複数の境界オブジェクト２０７を使用して外部オブジェクト２１０と非同期的に通信する。シングルスレッドのオブジェクト２０３は、内部スレッド２０２を使用して境界オブジェクト２０７と通信する。次に、境界オブジェクト２０７は、１つまたは複数の副スレッド２０４を使用して外部オブジェクト２１０と通信する。それによって境界オブジェクト２０７は、同時処理領域２０１の境界をまたいで情報および呼び出しを渡す。別の実施形態によれば、１つの境界オブジェクト２０７は、外部オブジェクト２１０に情報を渡す前に、副スレッド２０４を使用して別の境界オブジェクト２０７と通信する。
【００２７】
境界オブジェクト２０７は、同時処理領域２０１の内部スレッド２０２と、各副スレッド２０４との間のインターフェースとして動作する。別の実施形態によれば、境界オブジェクト２０７は、副スレッド２０４を使用して外部オブジェクト２１０からの同時処理領域内へ向けた通信を受け取り、適切な内部オブジェクト２０３への通信をフィルタリングする。フィルタリング方法は、本明細書においてより詳細に説明される。別の実施形態によれば、境界オブジェクト２０７は、内部スレッド２０２を使用して内部オブジェクト２０３からの同時処理領域外へ向けた通信を受け取り、副スレッド２０４を使用して適切な外部オブジェクト２１０へ通信を伝達する。一実施形態によれば、境界オブジェクトは、内部スレッド上で外部オブジェクトを呼び出すことができるが、境界オブジェクトがそのような呼び出しを行うことには制限がある。つまり、境界オブジェクトが外部オブジェクトを呼び出すことを許可することは、そのような呼び出しを行うことによる際限のない遅延またはデッドロックを引き起こしてはならない。別の制限は外部オブジェクトが内部オブジェクトへの参照を保持することを防止し、このことによって外部オブジェクトの制御の下での同時処理領域の直接的な再入（ｒｅｅｎｔｒａｎｃｙ）を防ぐ。
【００２８】
そのスレッド上で第１のオブジェクトが実行されているスレッドが第２のオブジェクトに入って第２のオブジェクトのメソッドを実行する場合、同期的な通信が行われる。外部オブジェクト２１０は、同時処理領域２０１内のシングルスレッドのオブジェクト２０３と同期的に通信しない。したがって、外部オブジェクト２１０を実行する副スレッドは、同時処理領域２０１内のシングルスレッドのオブジェクト２０３を直接的に呼び出す、または当該シングルスレッドのオブジェクト２０３に入ることはない。
【００２９】
図３は、そのシステム内で同時処理領域３０１が外部オブジェクト３１０とインターフェースを取る別のシステム例３００を示す。外部オブジェクト３１０と内部オブジェクト３０３の間の非同期的な通信の一例が示される。同時処理領域３０１は、内部スレッド３０２と、内部スレッド３０２上で実行されるように構成されたシングルスレッドのオブジェクト３０３と、外部オブジェクト３１０と通信するための境界オブジェクト３０７とを含む。このシステム３００の別の実施形態は、複数の境界オブジェクト３０７と、複数のシングルスレッドのオブジェクト３０３とを含む。
【００３０】
一実施形態によれば、外部オブジェクト３１０は、２つ以上の副スレッド３０４上で実行されるように構成されたマルチスレッドのオブジェクト３０５を含む。ある副スレッド３０４Ａ上で実行されるマルチスレッドのオブジェクト３０５のある部分３０５Ａが示され、別の副スレッド３０４Ｂ上で実行されるマルチスレッドのオブジェクト３０５の別の部分３０５Ｂが示される。別の実施形態によれば、外部オブジェクト３１０は、複数のマルチスレッドのオブジェクト３０５、または１つの副スレッド３０４上で実行されるように構成されたシングルスレッドのオブジェクト（図示せず）を含む。
【００３１】
システム３００における同時処理領域３０１は、ワークキュー３０８を保守する。ワークキュー３０８は、その構造にタスク（例えば、内部のシングルスレッドのオブジェクト３０３のメソッドの呼び出し、データの更新、およびその他の実行可能なメソッド）がポストされ（例えば、挿入され）、その構造からタスクが取り除かれる多要素データ構造である。一実施形態によれば、タスクはそれらのタスクがポストされたのと同じ順番でのみ、すなわちファーストイン、ファーストアウトの制約に従ってワークキュー３０８から取り除かれる。別の実施形態によれば、ワークキュー３０８にポストされたタスクは優先度を割り当てられ、各タスクはそのタスクの優先度に従って取り除かれる。
【００３２】
受信される通信は境界オブジェクト３０７によってワークキュー３０８にポストされる。これらのポストされた通信は、内部のシングルスレッドのオブジェクト３０３のタスク、または同時処理領域３０１に関連する境界オブジェクト３０７のタスクの実行の要求（例えば、呼び出しまたはコール）であるワークアイテム３１１を形成する。ワークアイテム３１１を形成する要求は、外部オブジェクト３１０によって、または別の境界オブジェクト３０７によって境界オブジェクト３０７に伝えられることができる。例えば、図３においては、矢印３２０で示されるように、外部オブジェクト３１０のマルチスレッドのオブジェクト３０５は、境界オブジェクト３０７にタスクを実行するように要求する。矢印３２５で示されるように、次に境界オブジェクト３０７は、当該タスクを含むワークアイテム３１１をワークキュー３０８の末尾にポストする。別の実施形態によれば、複数の境界オブジェクト３０７が同時処理領域３０１と関連付けられ、これらの境界オブジェクト３０７のうちの１つまたは複数はワークアイテム３１１をワークキュー３０８にポストすることができる。さらに別の実施形態によれば、内部のシングルスレッドのオブジェクト３０３は、タスクの実行を後に遅らせるために、ワークアイテム３１１をワークキュー３０８にポストするように境界オブジェクト３０７に要求する。
【００３３】
一実施形態によれば、新しいタスクをワークキュー３０８にポストする準備をする場合に資源を確保するために、境界オブジェクト３０７はワークキュー３０８をチェックし、キューに入れられたワークアイテム３１１のいずれかが関連するタスクを含んでいるかどうかを判定する。関連するタスクが存在する場合、境界オブジェクト３０７は、全く新しいワークアイテム３１１として新しいタスクをポストするのではなく、新しいタスクを既にキューに入れられている関連するタスクにサブタスクとして選択的にバンドルすることができる。
【００３４】
引き続き図３を参照すると、一実施形態によれば、同時処理領域３０１は、ワークキュー３０８からのワークアイテム３１１を処理のためにシングルスレッドのオブジェクト３０３にディスパッチするディスパッチャ３０９を含む。ディスパッチャ３０９は、内部スレッド３０２を用いてワークアイテム３１１をワークキュー３０８から取り除き、内部スレッド３０２上で実行するために各ワークアイテム３１１をディスパッチする。ディスパッチャ３０９は、ワークアイテム３１１に含まれるタスクを呼び出す。例えば、図３においては、矢印３３０で示されたように、ディスパッチャ３０９はワークキュー３０８からのワークアイテム３１１をディスパッチする。矢印３３５で示されたように、次にワークアイテム３１１は内部スレッド３０２上で実行される。
【００３５】
一実施形態によれば、ワークアイテム３１１をワークキュー３０８にポストすることが、ディスパッチャ３０９を強制的に動作させることはない。むしろ、ワークアイテム３１１の実行は、同時処理領域３０１の最も高レベルのサイクルのロジックによって指示された時点まで延期される。一旦ワークアイテム３１１がワークキュー３０８にポストされると、内部スレッド３０２は、同時処理領域３０１の次の適切なサイクルにおいて、ディスパッチャ３０９によって決定されたように要求されたタスクを実行する。したがって、外部オブジェクト３１０は、いつワークアイテム３１１が取り除かれるのか、ひいてはいつ内部のシングルスレッドのオブジェクト３０３のタスクが呼び出され、実行されるのかを決定しない。同様に、外部オブジェクト３１０は、いつ境界オブジェクト３０７が同時処理領域３０１の内部スレッド３０２上でタスクを実行するのかを決定しない。
【００３６】
一旦タスクがディスパッチされ、完了されると、同時処理領域外へ向けた結果がコールバックとして境界オブジェクト３０７に渡される。次に、境界オブジェクト３０７は、当該コールバックを、当該結果を達成したタスクを呼び出したワークアイテム３１１を最初にポストした外部オブジェクト３１０に伝える。コールバックの例は、データ、タスクが完了したことを示すフラグ、メソッドの呼び出しなどを含む。
【００３７】
図４は、内部のシングルスレッドのオブジェクトと、外部オブジェクトとの間の非同期的な通信を示す。本発明の一実施形態によれば、外部オブジェクト４０１と、内部のシングルスレッドのオブジェクト４０９との間の非同期的な通信の間に行われる一連の通信４００が示される。最初に、外部オブジェクト４０１が、境界オブジェクト４０３と通信する４０２。概して、この通信４０２は、同時処理領域（図示せず）と関連するタスクのうちの１つまたは複数を呼び出す呼び出しまたは要求の形態である。要求されたタスクは実際にはシングルスレッドのオブジェクト４０９のタスクであるが、外部オブジェクト４０１は、タスクを同時処理領域または境界オブジェクト４０３と関連付けるだけである。
【００３８】
次に、境界オブジェクト４０３が、ワークキュー４０５と通信する４０４。概して、この通信４０４は、ワークアイテム（図示せず）をワークキュー４０５にポストすることを含む。次に、ワークキュー４０５が、ディスパッチャ４０７と通信する４０６。概して、この通信４０６は、ディスパッチャ４０７がワークキュー４０５上のポストされた各ワークアイテムを逐次的にディスパッチすることを含む。最後に、ディスパッチャ４０７が、そのオブジェクトのタスクが呼び出されている内部のシングルスレッドのオブジェクト４０９と通信する４０８。概して、この通信４０８は、内部のシングルスレッドのオブジェクト４０９のタスクの呼び出しを含む。別の実施形態では、外部オブジェクト４０１は同時処理領域の別の境界オブジェクト（図示せず）と通信している。
【００３９】
図２〜４に関連して上述した同時処理領域の境界をまたぐ非同期的な通信は、「背景技術」の節で上述した再入の問題から内部のシングルスレッドのオブジェクトを保護する。理解されるように、内部的に制御された再入は、同時処理領域の最も高レベルのロジックの制御下のオブジェクト（例えば、内部のシングルスレッドのオブジェクト、または境界オブジェクト）が内部スレッドに、同様に最も高レベルのロジックの制御下にある別のオブジェクトへ再入するように命令する場合に起こる。外部的に制御された再入は、同時処理領域の最も高レベルのロジックの制御下にないオブジェクト（例えば、外部オブジェクト）が内部スレッドに、最も高レベルのロジックの制御下にあるオブジェクトへ再入するように命令する場合に起こる。内部的に引き起こされる再入は、内部オブジェクトがそのオブジェクト自体に、または同じ同時処理領域内の別のオブジェクトに再入する場合に起こる。外部的に引き起こされる再入は、外部オブジェクトによって生起されたイベントが再入に影響を与え、再入の制御を同時処理領域の内部オブジェクトにおいて集合的に具現化されたロジックから事実上切り離す場合に起こる。結果は、非決定性（ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｒｅｅｎｔｒａｎｃｙ）の再入である。
【００４０】
再び図３を参照すると、同時処理領域３０１の境界をまたがる非同期的な通信のみを許可することは、内部のシングルスレッドのオブジェクト３０３を外部的に制御された再入から保護する。例えば、内部のシングルスレッドのオブジェクト３０３の実行が外部オブジェクト３１０のタスクの呼び出しを含む場合、内部スレッド３０２は、同時処理領域３０１に関連する境界オブジェクト３０７のうちの１つに入り、外部オブジェクト３１０のタスクの実行を要求する役割を持つタスクを呼び出すことになる。次に、内部スレッド３０２は、内部のシングルスレッドのオブジェクト３０３のタスクの実行、またはワークキュー３０８からのディスパッチされたワークアイテム３１１の実行に戻ることになる。内部スレッド３０２は同時処理領域３０１を離れて外部オブジェクト３１０に入ることはないため、内部スレッド３０２は外部オブジェクト３１０の制御下に入ることはない。
【００４１】
さらに、内部スレッド３０２が外部オブジェクト３１０のタスクの実行を許可される場合、およびそのタスクの実行が内部のシングルスレッドのオブジェクト３０３の別のタスクの呼び出しを含むとした場合、内部スレッド３０２は同時処理領域３０１への再入を許可されない。より正確に言えば、内部スレッド３０２は同時処理領域３０１の境界オブジェクト３０７に入ってワークアイテム３１１をポストする役割を持つタスクを呼び出す。代替として、上述のように、ある制約の下で境界オブジェクトはタスクの呼び出しのために内部スレッド上で外部オブジェクトを呼び出すことができる。タスクの呼び出しの後、内部スレッド３０２は外部オブジェクト３１０のタスクの実行に戻り、引き続いて内部のシングルスレッドのオブジェクト３０３の初めの元のタスクの実行に戻る。換言すると、内部スレッド３０２は、初めのタスクの実行が完了するまで、および同時処理領域３０１のディスパッチャ３０９によって外部オブジェクト３１０による別のタスクの呼び出しを実行するように指示されるまで、外部オブジェクト３１０による別のタスクの呼び出しを実行しない。
【００４２】
ここで図５および６を参照すると、データソースを含む外部オブジェクトの例を用いた本発明の実施形態が説明される。図５は、同時処理領域５０１およびデータソース５１２を含むシステム５００を示し、図６は同時処理領域５０１の内部スレッド５０２と、データソース５１２の副スレッド５０４との間のインターフェースを示す処理フローチャート６００を示す。一実施形態において、副スレッド５０４は複数の副スレッド５０４を含む。同時処理領域５０１はシングルスレッドのオブジェクト５０３と、ディスパッチャ５０９とを含み、境界オブジェクト５０７と関連付けられる。同時処理領域５０１は、同時処理領域５０１の内部スレッド５０２上で実行されるべき未実行のタスクを示すワークキュー５０８を保守する。一実施形態において、データソース５１２はデータベースである。別の実施形態において、データソース５１２はネットワークである。
【００４３】
内部スレッド５０２および副スレッド５０４の実行経路が両図に示される。図５において、破線矢印は内部スレッド５０２上で行われるタスクの実行を示し、実線矢印は副スレッド５０４のうちの１つまたは複数の上で行われるタスクの実行を示す。破線矢印および実線矢印を参照する番号は、図６に関して実行されている処理またはタスクに対応し、図６はそのスレッド上でそのタスクが実行されるスレッドに沿って配置された各タスクを示す。
【００４４】
引き続き図５および６を参照すると、方法は開始ブロック６０１で始まり、その処理においてシングルスレッドのオブジェクト５０３が境界オブジェクト５０７にデータソース５１２に関連するタスクを呼び出すように要求する処理６０２に進む。この要求は、同時処理領域５０１の内部スレッド５０２上で実行される。処理６０３において、ディスパッチャ５０９は、ワークキュー５０８を介して各ワークアイテム５１１を順序付け、それらをディスパッチする。一実施形態によれば、ワークアイテム５１１は、それらのワークアイテムがワークキュー５０８にポストされた順序で、内部スレッド５０２を用いてディスパッチされる。例えば、新しいワークアイテム５１１がその間に追加されないと仮定して、ディスパッチャ５０９はワークアイテム１から順序付けを開始し、ワークアイテム７で順序付けを完了する。ワークアイテム７の後に任意の新しいワークアイテム５１１が追加される。別の実施形態によれば、ワークアイテム５１１は、割り当てられた優先度値に従ってディスパッチされる。
【００４５】
メソッド６０２はメソッド６１１にも至り、メソッド６１１は操作６０２と同時に実行される。メソッド６１１において、境界オブジェクト５０７はデータソース５１２に関連するタスクを呼び出す。呼び出しは副スレッド５０４のうちの１つの上で実行される。次に、方法はその処理において副スレッド５０４のうちの１つまたは複数上でデータソース５１２のタスクが実行される処理６１２に進む。次に、処理６１３はデータベース５１２が実行結果をコールバックとして境界オブジェクト５０７に返すことを含む。結果の伝達は、副スレッド５０４のうちの１つまたは複数上で行われる。次に、処理６１４において、境界オブジェクト５０７は、コールバックをワークアイテム５１１としてワークキュー５０８にポストする。ポストは、副スレッド５０４のうちの１つまたは複数上で実行される。
【００４６】
処理６１４から、方法は処理６０４に進む。同様に処理６０３も処理６０４に進む。処理６０４は、処理６０３においてワークキュー５０８内のワークアイテム５１１を逐次的に実行していたディスパッチャ５０９が、処理６１４において境界オブジェクト５０７によって追加されたコールバックワークアイテム５１１に到達した場合に行われる。ディスパッチャ５０９は、内部スレッド５０２を使用してコールバックをディスパッチする。一旦コールバックがディスパッチされてしまうと、処理６０５において、ディスパッチャ５０９はワークキュー５０８内の各ワークアイテム５１１を逐次的にディスパッチし続ける。６０６において方法は終了する。
【００４７】
ここで図７および８を参照すると、第２の同時処理領域を含む外部オブジェクトの例を用いた本発明の実施形態が説明される。図７は、第１および第２の同時処理領域７０１、７２１をそれぞれ含むシステム７００を示し、図８は、そのフローチャートにおいて第１の同時処理領域７０１が第２の同時処理領域７２１とインターフェースを取る処理フローチャート８００を示す。各同時処理領域７０１、７２１は、内部スレッド７０２、７２２と、シングルスレッドのオブジェクト７０３、７２３と、ディスパッチャ７０９、７２９とをそれぞれ含む。各同時処理領域７０１、７２１はそれぞれ、境界オブジェクト７０７、７２７と関連付けられ、内部スレッド７０２、７２２上で実行されるべき未実行のワークアイテム７１１、７３１を示すワークキュー７０８、７２８を保守する。図７において、破線矢印の第１の組は内部スレッド７０２上で行われるタスクの実行を示し、実線矢印の組は副スレッド７０４のうちの１つまたは複数上で行われるタスクの実行を示し、破線矢印の第２の組は第２の内部スレッド７２２上で行われるタスクの実行を示す。第１の同時処理領域７０１と第２の同時処理領域７２１の間の通信に関わる種々の処理を実行するこれらの破線矢印および実線矢印が示される。これらの矢印を参照する参照番号は、図８に関して実行されている処理またはタスクに対応する。
【００４８】
引き続き図７および８を参照すると、方法は開始ブロック８０１で始まり、処理８０２および８２２の両方に進む。処理８２２は、第２の同時処理領域７２１のディスパッチャ７２９が内部スレッド７２２を使用してワークキュー７２８上の各ワークアイテム７３１を逐次的にディスパッチすることを含む。処理８０２は処理８２２と同時に実行される。処理８０２において、第１の同時処理領域７０１のシングルスレッドのオブジェクト７０３は、第２の同時処理領域７２１のオブジェクトのうちの１つからタスクを呼び出すように境界オブジェクト７０７に要求する。一実施形態において、要求されたタスクは、第２の同時処理領域７２１のシングルスレッドのオブジェクト７２３のうちの１つのタスクである。別の実施形態において、要求されたタスクは、第２の同時処理領域７２１と関連する境界オブジェクト７２７のうちの１つのタスクである。
【００４９】
処理８０２から、方法は処理８０３および８１２の両方に進む。処理８０３において、第１の同時処理領域７０１のディスパッチャ７０９は、ワークキュー７０８上の各ワークアイテム７１１を逐次的にディスパッチする。処理８１２において、第１の同時処理領域７０１の境界オブジェクト７０７は、副スレッド７０４のうちの１つまたは複数を使用して第２の同時処理領域７２１の境界オブジェクト７２７と通信する。通信はタスクを呼び出す要求を含む。次に、処理８１３において、第２の境界オブジェクト７２７は、要求されたタスクをワークアイテム７３１としてワークキュー７２８にポストする。ポストは、副スレッド７０４のうちの１つまたは複数を使用して実行される。
【００５０】
処理８１３および処理８２２の両方は、処理８２３に至る。処理８２３において、ディスパッチャ７２９は、要求されたタスクを含むワークアイテム７３１に到達し、それをディスパッチする。このディスパッチは、第２の同時処理領域７２１の内部スレッド７２２上で実行される。次に、処理８２４において、タスクは第１の同時処理領域７０１内のシングルスレッドのオブジェクト７０３に対するコールバックとして実行される。ここで、方法は再び分岐し、処理８２５および８１４の両方に進む。処理８２５において、ディスパッチャ７２９は、ワークキュー７２８上の各ワークアイテム７３１を逐次的にディスパッチし続ける。
【００５１】
処理８１４は処理８２５と同時に行われる。処理８１４において、第２の同時処理領域７２１の境界オブジェクト７２７は、１つまたは複数の副スレッド７０４を使用して第１の同時処理領域７０１の境界オブジェクト７０７に、コールバックをワークアイテム７１１としてワークキュー７０８へポストするように要求する。次に、処理８１５において、境界オブジェクト７０７は、コールバックをワークキュー７０８にポストする。ポストは、副スレッド７０４のうちの１つまたは複数上で実行される。
【００５２】
処理８０４は、第１の同時処理領域７０１のディスパッチャ７０９がワークキュー７０８上のポストされたコールバックに到達した場合に行われる。ディスパッチャ７０９は、第１の同時処理領域７０１の内部スレッド７０２を使用してコールバックをディスパッチする。処理８０５においてコールバックが実行される。次に、方法は、その処理においてディスパッチャ７０９がワークキュー７０８を介して順序付けを継続し、各ワークアイテム７１１を順にディスパッチする処理８０６に進む。８０６において方法は終了する。
【００５３】
システムの別の例（図示せず）は、互いにおよびその他の外部オブジェクトとインターフェースを取る３つ以上の同時処理領域を含む。かかるシステムは、実質的に本明細書で説明されたのと同様の処理に従って機能する。システムの各同時処理領域は、内部スレッドと、１つまたは複数のシングルスレッドのオブジェクトと、ディスパッチャとを含む。各同時処理領域は、少なくとも１つの境界オブジェクトと関連付けられ、ワークキューを保守する。同時処理領域の境界をまたがる全ての通信は非同期的である（例えば、それぞれの境界オブジェクト、ワークキュー、およびディスパッチャを介してフィルタリングされる）。
【００５４】
上述の各種の実施形態は単に例として与えられるに過ぎず、本発明を限定するように解釈されるべきではない。当業者は、本明細書で示され、説明された実施形態およびアプリケーションの例に従うことなしに、ならびに添付の特許請求の範囲に記載された本発明の真の精神および範囲を逸脱することなしに本発明に対してなされ得る種々の修正および変更を容易に理解するであろう。
【図面の簡単な説明】
【００５５】
【図１】その環境内で本発明が実施され得る好適なコンピューティング環境を示す図である。
【図２】本発明の一実施形態による、複数のオブジェクトを同時に実行するように構成されたシステム例を示す図である。
【図３】本発明の一実施形態による、複数のオブジェクトを同時に実行するように構成された別のシステム例を示す図である。
【図４】内部のシングルスレッドのオブジェクトと、外部オブジェクトとの間の非同期的な通信を示す図である。
【図５】同時処理領域がデータベースとインターフェースを取る場合の実行経路の例を示す図である。
【図６】そのフローチャートにおいて第１の同時処理領域がデータベースとインターフェースを取る処理フローチャートである。
【図７】第１の同時処理領域が第２の同時処理領域とインターフェースを取る場合の実行経路の例を示す図である。
【図８】そのフローチャートにおいて第１の同時処理領域が第２の同時処理領域とインターフェースを取る処理フローチャートである。
【図１】
2008539517.tif 000003
【図２】
2008539517.tif 000004
【図３】
2008539517.tif 000005
【図４】
2008539517.tif 000006
【図５】
2008539517.tif 000007
【図６】
2008539517.tif 000008
【図７】
2008539517.tif 000009
【図８】
2008539517.tif 000010
【国際調査報告】
2008539517.tif 000011