(57)【特許請求の範囲】
【請求項１】
プロセッサーを有するデバイスの仮想環境においてアプリケーションを代理して処理を実行する方法であって、命令を前記プロセッサー上で実行するステップを含み、前記命令が、
実行イベントを伴うワーカー・プロセスを実行するためにアプリケーションから要求を受け取ると、前記仮想環境の外部において前記ワーカー・プロセスの実行を開始し、
前記アプリケーションの終了を検出すると、前記ワーカー・プロセスの終了を控え、
前記ワーカー・プロセスが前記実行イベントを遂行すると、前記ワーカー・プロセスの実行イベントについて前記アプリケーションに通知する
ように構成される、方法。
【請求項２】
請求項１記載の方法において、前記実行イベントが、
コンピューター・プロセスの完了、
タイムアウト、
前記デバイスのユーザーからのユーザー入力の検出、および
前記デバイスのデバイス・イベントの検出
を含む実行イベント・セットから選択される、方法。
【請求項３】
請求項１記載の方法において、前記命令が更に、前記仮想環境を終了すると、前記ワーカー・プロセスを終了するのを控えるように構成される、方法。
【請求項４】
請求項１記載の方法において、前記命令が更に、
前記アプリケーションの終了を検出した後に前記アプリケーションの再開を検出すると、
終了の前に前記アプリケーションによって開始される、少なくとも１つの識別されるワーカー・プロセスを識別し、
前記アプリケーションを、前記少なくとも１つの識別されるワーカー・プロセスと再接続するように構成される、方法。
【請求項５】
請求項１記載の方法であって、更に、
前記アプリケーションが終了したかを判定することを含み、
および
前記アプリケーションが終了したと判定すると、前記仮想環境において前記アプリケーションを再開するように前記アプリケーションが通知される、方法。
【請求項６】
請求項１記載の方法であって、
前記アプリケーションからの前記要求によってコールバックが特定され、
前記アプリケーションに通知することが、前記ワーカー・プロセスが前記実行イベントを遂行すると、前記アプリケーションの前記コールバックを伴うことを含む、方法。
【請求項７】
請求項１記載の方法であって、
前記デバイスがコンピューティング環境を有し、
前記アプリケーションの終了が、前記デバイスの前記コンピューティング環境を再スタートしている間に発生される、方法。
【請求項８】
請求項７記載の方法であって、前記命令が更に、前記デバイスの前記コンピューティング環境を再スタートした後に、前記仮想環境の外部において前記ワーカー・プロセスの実行を再開するように構成される、方法。
【請求項９】
請求項１記載の方法であって、
前記デバイスが、該デバイスとはリモートにある第２デバイス上で実行するリモート・プロセスと前記ワーカー・プロセスで通信可能であり、
前記命令が更に、前記第２デバイス上で実行する前記リモート・プロセスを前記ワーカー・プロセスと接続する要求を受け取ると、前記リモート・プロセスを前記ワーカー・プロセスと接続するように構成される、方法。
【請求項１０】
デバイスのアプリケーションを代理して処理を実行するためのシステムであって、
少なくとも１つのアプリケーションが前記デバイス上で実行している仮想環境と、
前記仮想環境の外部において前記デバイス上で実行するワーカー・ホスト・コンポーネントであって、
実行イベントを伴うワーカー・プロセスを実行するために、要求をアプリケーションから受け取ると、前記仮想環境の外部において前記ワーカー・プロセスの実行を開始し、
前記アプリケーションの終了を検出すると、前記ワーカー・プロセスの終了を控え、
前記ワーカー・プロセスが前記実行イベントを遂行すると、前記ワーカー・プロセスの前記実行イベントについて前記アプリケーションに通知する
ように構成される、ワーカー・ホスト・コンポーネントと
を備える、システム。
【請求項１１】
請求項１０記載のシステムにおいて、
前記仮想環境がｗｅｂブラウザーを含み、
前記アプリケーションがｗｅｂアプリケーションを含み、
前記ワーカー・プロセスが前記ｗｅｂブラウザーの外部で実行するｗｅｂワーカーを含む、システム。
【請求項１２】
請求項１１記載のシステムにおいて、前記ワーカー・ホスト・コンポーネントが、前記ｗｅｂブラウザーのクロス・ドメイン・セキュリティ・ポリシに従って、前記ワーカー・プロセスの実行を制限するように構成される、システム。
【請求項１３】
請求項１１記載のシステムにおいて、前記ワーカー・ホスト・コンポーネントが、ローカル・ｗｅｂサーバー・プロセスとして前記ワーカー・プロセスを実行するように構成されるローカルｗｅｂサーバーを備える、システム。
【請求項１４】
請求項１０記載のシステムにおいて、
前記ワーカー・ホスト・コンポーネントが、前記デバイスのコンピューティング環境で実行するバックグラウンド・サービスを含み、
前記デバイスが前記コンピューティング環境を再スタートすると、前記ワーカー・ホスト・コンポーネントが自動的に再スタートするように構成される、システム。
【請求項１５】
請求項１０記載のシステムであって、更に、
ワーカー・ホスト管理コンポーネントであって、前記ワーカー・ホスト・コンポーネントにおけるワーカー・ホスト・コンポーネント故障を検出すると、
前記ワーカー・ホスト・コンポーネントを終了し、
前記デバイスのコンピューティング環境において前記ワーカー・ホスト・コンポーネントの実行を再始し、
前記ワーカー・ホスト・コンポーネントによるワーカー・プロセスの実行を再開する
ように構成されるワーカー・ホスト管理コンポーネントを備える、システム。
【請求項１６】
請求項１０記載のシステムにおいて、前記ワーカー・ホスト・コンポーネントが、
前記ワーカー・プロセスをサービスから受け取るように構成され、
前記ワーカー・ホスト・コンポーネントが、
前記デバイスのコンピューティング環境を再スタートした後に、前記サービスから第２ワーカー・プロセスを要求し、
前記サービスから前記第２ワーカー・プロセスを受け取ると、前記仮想環境の外部において前記第２ワーカー・プロセスの実行を開始する
ことにより、前記ワーカー・プロセスの実行が再開される、システム。
【請求項１７】
請求項１０記載のシステムにおいて、
前記ワーカー・プロセスを第１サービスから受け取り、
前記仮想環境の外部における前記ワーカー・プロセスの実行が、前記ワーカー・プロセスと前記第１サービス以外のサービスとの間で通信を制限することを含む、システム。
【請求項１８】
命令を含むコンピューター可読ストレージ媒体であって、前記命令が、仮想環境を含むデバイスのプロセッサー上で実行するときに、前記デバイスに、
実行イベントを伴うワーカー・プロセスを実行するために、要求をアプリケーションから受け取ると、前記仮想環境の外部において前記ワーカー・プロセスの実行を開始し、
前記アプリケーションの終了を検出すると、前記ワーカー・プロセスの終了を控え、
前記ワーカー・プロセスが前記実行イベントを遂行すると、前記ワーカー・プロセスの前記実行イベントについて前記アプリケーションに通知する
ことにより、前記仮想環境においてアプリケーションを代理して処理を実行させる、コンピューター可読ストレージ媒体。
【請求項１９】
請求項１８記載のコンピューター可読ストレージ媒体において、前記仮想環境の外部において前記ワーカー・プロセスの実行を開始することが、
前記仮想環境の外部において前記ワーカー・プロセスの実行を開始するオファーをユーザーに提示すること、および
前記ユーザーから前記オファーの承認を受け取ると、前記仮想環境の外部において前記ワーカー・プロセスの実行を開始することを含む、コンピューター可読ストレージ媒体。
【請求項２０】
請求項１８記載のコンピューター可読ストレージ媒体において、
前記デバイスがコンピューティング環境を有し、
前記ワーカー・プロセスの実行イベントについて前記アプリケーションに通知することが、前記デバイスのコンピューティング環境において、前記仮想環境および前記アプリケーションをフォアグラウンド提示にすることを含む、コンピューター可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピューティングの技術分野では、数多くのシナリオが、ｗｅｂブラウザー内で実行するｗｅｂアプリケーションのようなデバイスの仮想環境内のアプリケーション、デバイスにより供給されるコンピューティング環境以外のもののために開発されるコード（例えば、Ｊａｖａ（登録商標）バーチャル・マシンのために設計されたＪａｖａ（登録商標）コード）、および分離されたバーチャル・マシン内で実行する信頼性のないコードについての実行を必要とする。
デバイス固有の処理としてではなく、バーチャル・マシン内のアプリケーションの実行は、実行中にアプリケーションの互換性および安全性を容易にすることができる。
【０００２】
このようなアプリケーションは、しばしば、ロング・ラン(long-running)、コンピューター集中処理のようなバックグラウンド処理を必要とする。例えば、アプリケーションは、移動体電話への着呼のような特定タイプのイベントについてデバイスのハードウェア・コンポーネントをモニターしようとすることもある。しかしながら、このような処理がアプリケーションによって実行される場合、アプリケーションの他の責務が望ましくなく遅延されることになる。例えば、コンピューター集中処理は、グラフィカル・ユーザ・インタフェース（ＧＵＩ）メッセージについてのハンドリングを優先させることができ、相互作用性またはパフォーマンスが低減されてアプリケーションに提示させることがある。このようなバックグランド処理を実現すると共にアプリケーションの他の処理責務の割り込みを低減させるために、アプリケーションは仮想環境内で１つ以上のワーカー・プロセスを呼び出すことができる。例えば、昨今のバージョンのハイパーテキスト・マークアップ言語（ＨＴＭＬ）で提供される「ｗｅｂワーカー」モデルにより、アプリケーションは、ｗｅｂブラウザーに対して該ｗｅｂブラウザー内で別個のワーカー・プロセスを開始するのに要求することが可能になる。つまり、セキュア且つ高性能に、アプリケーションを代理するバックグランド処理を遂行する。
【発明の概要】
【０００３】
本概要は、以下の発明の詳細な説明で更に説明する簡略化した形態での概念の選択を導入するために設けるものである。本概要は、特許請求する主題についての鍵となる要因または必須の特徴を特定することを意図するものではなく、且つ、特許請求する主題の範囲を限定するために使用されるのを意図するものでもない。
【発明が解決しようとする課題】
【０００４】
仮想環境内において実行するアプリケーションを代理するワーカー・プロセスの例示が幾らかの利点を提示する一方で、仮想環境においてこれらワーカー・プロセスをまた実行するモデルは、重大な不利な点を提示することもある。第１の実施例として、「ｗｅｂワーカー」モデルは、通例、ｗｅｂワーカーのライフ・サイクルをｗｅｂアプリケーションのライフ・サイクルに連結する。即ち、（例えば、ｗｅｂアプリケーションをホストしているページをクローズすることによって）ｗｅｂアプリケーションが停止(suspend)されるかまたは終了(terminate)されるときに、ｗｅｂワーカーもまた終了される。ワーカー・プロセスはまた、当該ワーカー・プロセスをホストしている仮想環境の終了（例えば、ｗｅｂブラウザーをクローズする）するときに、および／またはデバイスのコンピューティング環境を再スタートする（例えば、デバイスのオペレーティング・システムを停止または再起動する）ときに、終了させることもできる。シナリオの中には、ワーカー・プロセスのライフ・サイクルをアプリケーションおよび／または仮想環境のライフ・サイクルに関連付けることは望ましいものもある。しかしながら、他のシナリオでは、ワーカー・プロセスにより、このようなイベントの後にも持続し、および／またはオペレーティング・システムの再起動といったデバイス・イベントを通じて持続するのを可能にすることが望ましいものもある。
【０００５】
本明細書に提示する技術は、ｗｅｂブラウザーまたはバーチャル・マシンのような仮想環境内においてアプリケーションを代表して実行するワーカー・プロセスの回復性を拡張するためのものである。このような技術によれば、仮想環境内でワーカー・プロセスを実行するのではなく、デバイスは仮想環境の外部においてワーカー・プロセスを実行することができる。アプリケーションおよび／または仮想環境が終了されると、デバイスは、ワーカー・プロセスを終了するのを控えることができ、つまり、ワーカー・プロセスのライフ・サイクルをアプリケーションのライフ・サイクルから分離する。任意には、当該ワーカー・プロセスをホストしているプロセスでの故障またはオペレーティング・システムの再起動といった仮想環境の外部で発生するイベントを潜在的に中断させることにより、ワーカー・プロセスが持続するようにも構成することもできる。ワーカー・プロセスが実行イベントを遂行すると（例えば、複雑なコンピューター・プロセスを完了するかまたは特定の種別のデバイス・イベントを検出すると）、仮想環境において実行しているアプリケーションに通知されて（任意には、現在実行していない場合にアプリケーションを再開して）、その結果、ワーカー・プロセスが遂行した実行イベントのハンドリングを履行することができる。本明細書において提示する技術は、仮想環境内においてワーカー・プロセスの実行をアプリケーションの実行から切り離すことにより、仮想環境内でアプリケーションにより達成可能なバックグラウンド処理の回復性および性能を拡張することができる。
【０００６】
上記およびこれに関連する目的を達成するために、以下の説明および添付の図面は、特定の例示の態様および実施形態について例示するものである。これらは、１つ以上の態様で使用され得る様々な方法の内のほんの幾らかについて示すものである。本開示についての他の態様、利点、および新規の特徴は、添付の図面と関連して考察すると、以降の発明の詳細な説明から明らかなものとなろう。
【図面の簡単な説明】
【０００７】
【図１】図１は、ｗｅｂブラウザー内のｗｅｂアプリケーションを代理してワーカー・プロセスを実行することを特徴とする例示のシナリオについて示す。
【図２】図２は、本明細書に提示する技術により、アプリケーションを代理してワーカー・プロセスを実行することを特徴とする例示のシナリオについて示す。
【図３】図３は、本明細書に提示する技術により、ローカル・イベントに関連するクライアント・アプリケーションの要求を満たすようにデバイスを構成する例示の方法について示す。
【図４】図４は、本明細書に提示する技術により、ローカル・イベントに関連するクライアント・アプリケーションの要求を満たすための例示のシステムについて示したコンポーネント・ブロック図である。
【図５】図５は、本明細書に記載する１つ以上のプロビジョンを実施するように構成されるプロセッサー実行可能命令を含む例示のコンピューター可読媒体について示す。
【図６】図６は、デバイス・メッシュ内においてデバイス上で実行するアプリケーションのワーカー・プロセスを特徴とする例示のシナリオについて示す。ここでは、本明細書に提示する技術により、ワーカー・プロセスが、アプリケーションのサーバー、他のサーバー、およびデバイス・メッシュ内の他のデバイスのリモート・プロセスとの通信を試行することができる。
【図７】図７は、本明細書に提示する技術により、仮想環境内で実行するアプリケーションを代理する持続的なワーカー・プロセスの実行を説明する例示のシナリオについて示す。
【図８】図８は、例示のコンピューティング環境について示す。ここでは、本明細書に記載する１つ以上のプロビジョンを実施することができる。
【発明を実施するための形態】
【０００８】
特許請求する主題について、これより図面を参照して説明する。ここでは、全体を通じて同様の符号を、同様の構成要素を参照するために用いる。以下の記載においては、説明の目的で多くの具体的な詳細を記載し、特許請求する主題についての完全な理解に供する。しかしながら、特許請求する主題がこれらの具体的な詳細なくとも実施できることは明らかであろう。他の例では、構造およびデバイスをブロック図の形態で示し、特許請求する主題の説明を容易にする。
Ａ．序文
コンピューティングの分野では、多くのシナリオが、デバイス固有のコンピューティング環境ではなく、仮想環境において、デバイス上のアプリケーションの実行を必要とする。第１の実施例として、ｗｅｂブラウザーは、ＪａｖａＳｃｒｉｐｔおよびハイパーテキスト・マークアップ言語（ＨＴＭＬ）のようなデバイス非依存のコードを実行するために標準化プラットフォームを提供することができる。第２の実施例として、Ｊａｖａバーチャル・マシンは、汎用コンピューティング・デバイスとＪａｖａアプリケーションを代理するデバイス固有の機能（例えば、汎用メモリの割り当て要求のデバイスのメモリ・モデルへの変換）との間のブリッジを提供することができる。第３の実施例として、第１のデバイス固有の環境に対して設計されるコードは、第２のデバイス内で第１のデバイスのシミュレーションを提供するエミュレーターを通じて、完全な第２のデバイス上で実行することができる。第４の実施例として、信頼性のないコードが、「サンドボックス」即ち人工機械(artificial machine)内で実行することができ、その結果、悪意のある動作が人工機械へと分離されることになり、人工機械上での信頼性のないコードの効果は、デバイスへの損傷のリスクを伴うことなくデバイスによって評価することができる。
【０００９】
これらの、また他のシナリオは、仮想環境におけるアプリケーションの実行を提示する。このようなシナリオの多くでは、アプリケーションは、高性能にハンドリングされることになる幾らかのフォアグラウンドの責務を必要とすることもある。例えば、グラフィカル・ユーザ・インタフェース（ＧＵＩ）を提示するアプリケーションは、少ない遅延でさえもユーザーに通知可能であるために、高度な応答性を有する視覚上の制御により相互作用を履行するように設計することができる。このようなアプリケーションはまた、大量のバックグラウンド処理を伴うこともあり、ロング・ランでの計算、アイドル時間の間に実行されることになるメンテナンス・タスク、およびデバイスのイベント・モニタリングといったより緩和したやり方で実行することができる。
【００１０】
フォアグラウンド処理およびバックグラウンド処理の両方のハンドリングをバランスするために、仮想環境およびアプリケーションは、プリエンプティブ・マルチタスキングのような技術を提供することができる。ここでは、アプリケーションは各タスクについて優先度を指定することができる。しかしながら、このような技術は、アプリケーションに拘わる様々な処理タスクをスケジューリングするのに完全には適切とは言えないこともある。このような第１の例として、フォアグラウンド処理をハンドリングするために、幾らかの種別のバックグラウンド処理（例えば、リソースにおいて排他的ロックを伴うバックグラウンド処理）を優先させることは、可能ではなく、または効率的でない可能性がある。このような第２の例として、デバイス・イベントのモニタリングを伴うバックグラウンド処理である場合に、このようなバックグラウンド処理の中断が、結果として、このようなデバイス・イベントを検出の故障ということになる場合もある。
【００１１】
これら困難性の観点から、幾らかの仮想環境では、アプリケーションが仮想環境において別個のワーカー・プロセス開始を許可する。ワーカー・プロセスをアプリケーションの実行スレッドから分離することによって、仮想環境は、コンピューティング環境の並列の処理機能（例えば、オペレーティング・システムにより提供される、より高度でプリエンプティブなスケジューラ）および／またはデバイスのコンピューター・ハードウェア（例えば、マルチプロセッサー・デバイスの異なるプロセッサー、またはマルチコア・プロセッサの異なるコアにおけるワーカー・プロセスおよびアプリケーション・スレッドの並列の実行）を利用することができる。更に、アプリケーションと同一の仮想環境内のワーカー・プロセスの実行は、セキュリティの利点（例えば、アプリケーションに関して同一のセキュリティ・ポリシをワーカー・プロセスに適用する）および／または効率性の利点（例えば、仮想環境内のピア(peer)としてアプリケーションおよびワーカー・プロセスをタイトに結合するのを可能にする）を提供することができる。
【００１２】
図１は、仮想環境１１０（例えば、ｗｅｂブラウザー）を含むコンピューティング環境（例えば、オペレーティング・システム）を提示するユーザー１０６のデバイス１０４を特徴とする例示のシナリオ１００を示す。デバイス１０４は、１つ以上のサーバー１０２（例えば、ｗｅｂサーバー）と通信することができ、ユーザー１０６を代理して実行することになる１つ以上のアプリケーション１１２（例えば、ユーザー１０６によって要求されるｗｅｂページに埋め込まれたｗｅｂアプリケーション）を抽出することができる。それ故、デバイス１０４は、仮想環境１１０内でアプリケーション１１２の実行を開始することができる。更には、仮想環境１１０は、アプリケーション１１２を代理して実行されることになるもののアプリケーション１１２によるフォアグラウンド処理の実行を中断することのないバックグラウンドのメンテナンス・タスクといったワーカー・プロセス１１４の実行をアプリケーション１１２が要求するのを可能にするように構成することができる。仮想環境１１０は、それ故、ワーカー・プロセス１１４の実行をアプリケーション１１２と共に仮想環境１１０内で開始することができる。例えば、ワーカー・プロセス１１４は、移動体通信デバイス（例えば電話）によって受け取られる着信またはメッセージのような様々なデバイス・イベント１１６を通知されるよう要求することができる。
デバイス１０４は、コンピューティング環境１０８内で或るデバイス・イベント・モニタリング１１８を適用することができる。デバイス・イベント１１６を検出すると、仮想環境１１０内でデバイス・イベント通知１２０をワーカー・プロセス１１４にデリバリすることができる。このようにして、デバイス１０４は、アプリケーション１１２が、仮想環境１１０内でワーカー・プロセス１１４を呼び出すのを可能にし、アプリケーション１１２のフォアグラウンド処理を中断することなく様々な種別のバックグラウンド処理を遂行することができる。図１の例示のシナリオ１００で示すモデルは、正確に、ハイパーテキスト・マークアップ言語（ＨＴＭＬ）の最近のバージョンに示される「ウェブ・ワーカー」モデルを説明するものと認められよう。ここでは、ＪａｖａＳｃｒｉｐｔのスクリプトは、当該スクリプトと共にｗｅｂブラウザー内で実行される「ウェブ・ワーカー」プロセスにおいてバックグラウンド・プロセスを呼び出すことができる。
【００１３】
図１の例示のシナリオ１００に示すアーキテクチャーが幾らかの利点を提示できる一方で、幾らかの不利な点もまた生じることが認められることができる。特に、アプリケーション１１２と共に仮想環境１１０内でワーカー・プロセス１１４を実行することが特定の観点では不利となる場合がある。例えば、幾らかのシナリオでは、ワーカー・プロセス１１４のライフ・サイクルをアプリケーション１１２と連結することが望ましい場合がある。そうすると、アプリケーション１１２の停止または終了がまた、結果としてワーカー・プロセス１１４の停止または終了となる。しかしながら、他のシナリオでは、アプリケーション１１２およびワーカー・プロセス１１４を分離することが望ましい場合もある。例えば、ワーカー・プロセス１１４は、ユーザー１０６が完了を望むロング・ランのプロセスを含むことができるが、ユーザー１０６は、仮想環境１１０ではアプリケーション１１２の維持を望まないかもしれない（例えば、そのユーザー１０６は、ｗｅｂアプリケーションをホストするｗｅｂページから離れるよう意図的または偶然にナビゲートし、ｗｅｂアプリケーションに関連付けられるｗｅｂワーカーを終了させるかもしれない）。別の例として、ユーザー１０６は、デバイス１０４で生じる特定の種別のデバイス・イベント１１６（例えば、テキスト・メッセージまたは着信呼を受信するとユーザー１０６に通知する通知プロセス）についてのハンドラーのようにワーカー・プロセス１１４が無期限に持続することを望む場合がある。更には、幾らかのシナリオでは、ワーカー・プロセス１１４が、アプリケーション１１２の停止または終了の後のみならず、仮想環境１１０の停止または終了の後においても、および／またはコンピューティング環境１０８の中断の後（例えば、デバイス１０４を再起動若しくは再開した後）においても持続するのを可能にするのが望ましい場合もある。しかしながら、ワーカー・プロセス１１４のライフ・サイクルをアプリケーション１１２のライフ・サイクルと連結させることを厳格に必要とするモデルでは、このようなワーカー・プロセス１１４の持続性および回復性を提供する能力がないこともある。
Ｂ．提示する技術
本明細書に提示する技術は、仮想環境において実行するアプリケーション１１２を代理して、ワーカー・プロセスの持続性および／または回復性を改良するためのものである。これらの技術（また、図１の例示のシナリオ１００に示した技術のような他の技術とは対照的に）により、仮想環境１１０内でワーカー・プロセス１１４を実行するよりはむしろ、デバイス１０４が、アプリケーション１１２を代理するものの仮想環境１１０の外部にあるワーカー・プロセス１１４を実行することができる。更には、デバイスがアプリケーション１１２を終了するとき（一時的若しくは無期限にアプリケーション１１２を停止するか、またはアプリケーション１１２の実行を完了または中止するとき）、デバイス１０４はアプリケーション１１２に関連付けられる１つ以上のワーカー・プロセス１１４を終了するのを控えることができる。このようにして、デバイス１０４は、アプリケーション１１２が現在実行しない間でさえ、アプリケーション１１２のコンピューター処理の提供を継続する持続的なワーカー・プロセス１１４の実行を可能にすることができる。
【００１４】
図２は、本明細書に提示する技術の例示のアプリケーションを特徴とする例示のシナリオ２００について示す。この例示のシナリオ２００では、デバイス１０４は、仮想環境１１０を含むコンピューティング環境１０８をやはり含み、サーバー１０２から受け取ったアプリケーション１１２（例えば、ｗｅｂサーバーから受け取り、ｗｅｂブラウザー内で実行するアプリケーション）が実行される。アプリケーション１１２は、幾らかのバックグラウンド処理を要求することができ、仮想環境１１０は、アプリケーション１１２を代理するワーカー・プロセス１１４を開始することによって応ずることができる。しかしながら、本明細書に提示する技術によって、ワーカー・プロセス１１４はワーカー・プロセス・ホスト２０２が仮想環境１１０外部で実行することができる。ワーカー・プロセス・ホスト２０２は、ワーカー・プロセス１１４のライフ・サイクルおよびリソース要求を、仮想環境１１０によって、アプリケーション１１２のライフ・サイクルおよびリソース要求の管理とは独立して管理することができる。特に、アプリケーション１１２の終了を検出すると、デバイスのワーカー・プロセス・ホスト２０２は、ワーカー・プロセス１１４を終了するのを控えることができる。すなわち、ワーカー・プロセス１１４のライフ・サイクルは、アプリケーション１１２のライフ・サイクルとは別個のもの且つ独立して管理することができる。ワーカー・プロセス・ホスト２０２はまた、ワーカー・プロセス１１４が実行イベントを遂行すると、ワーカー・プロセス１１４がアプリケーション１１２に通知するのを可能にすることができる。例えば、ワーカー・プロセス１１４により実施されるバックグラウンド処理は、移動体電話からの着信のようなクライアントのデバイス・イベント１１６を検出することを必要とする場合がある。デバイスは、ワーカー・プロセス１１４を代理してデバイス・イベント１１６を検出するために幾らかのデバイス・イベント・モニタリング１１８を利用することができ、このようなデバイス・イベント１１６を検出すると、デバイス・イベント通知１２０をワーカー・プロセス１１４にデリバリすることができる。特に、この検出およびデリバリが成功裡に完了することができる一方で、アプリケーション１１２が現在実行していない場合でも（そして、任意に、仮想環境１１０がデバイス１０４で実行していない場合でも）ワーカー・プロセス１１４は動作している。更には、ワーカー・プロセス・ホスト２０２は、ワーカー・プロセス１１４により、アプリケーション１１２にデバイス・イベント１１６について通知するのを容易にする（例えば、アプリケーション１１２および／または仮想環境１１０が現在実行していない場合に、デバイス１０４は、アプリケーション１１２および／若しくは仮想環境１１０を再開することができるか、または、このようなプロセスがユーザー１０６によって後に再開されるまで、デバイス・イベント通知１２０を単に待ち行列化することができる）。このようにして、デバイス１０４は、ワーカー・プロセス１１４の持続的な実行をアプリケーション１１２の実行とは独立して遂行する。これらの、および他の利点は、図２の例示のシナリオ２００に示すアーキテクチャーおよび本明細書で提示する技術を通じて遂行可能なものすることができる。
Ｃ．例示的実施形態
図３は、本明細書に提示する技術の例示の第１の実施形態について示し、デバイス１０４の仮想環境１１０において実行するアプリケーション１１２を代理して処理を実行する例示の方法３００について示す。例示の方法３００は、例えば、メモリ回路、ハード・ディスク・ドライブのプラッタ、ソリッド・ステート・ストレージ・デバイス、または磁気若しくは光ディスクのようなデバイスのメモリ・コンポーネントに格納される命令のセットとして実施することができ、また、デバイスが有するプロセッサーで実行するときに、本明細書に提示する技術によりデバイスを動作させるように組織することができる。例示の方法３００は、３０２で始まり、デバイスのプロセッサー上での命令の実行３０４を伴う。具体的には、これらの命令は、アプリケーション１１２から要求を受け取ると、実行イベントを含むワーカー・プロセス１１４を実行し、仮想環境１１０の外部においてワーカー・プロセス１１４の実行を開始する（３０６）ように構成することができる。命令はまた、アプリケーション１１２の終了を検出すると、ワーカー・プロセス１１４の終了を控える（３０８）ように構成することができる。命令はまた、ワーカー・プロセス１１４が実行イベントを遂行すると、アプリケーション１１２に、ワーカー・プロセス１１４の実行イベントについて通知する（３１０）ように構成することができる。アプリケーション１１２に代わる処理を完了すると、例示の方法３００は、本明細書に提示する技術によりアプリケーション１１２を代理するワーカー・プロセス１１４の実行を提示するものであり、３１２において終了する。
【００１５】
図４は、本明細書に提示する技術の例示の第２の実施形態について示す。例示のシナリオ４００は、デバイス１０４の仮想環境１１０において実行するアプリケーションに代理して処理を実行するように構成される例示のシステム４０８を特徴とする例示のシナリオ４００について示す。例示のシステム４００は、例えば、デバイス４０２のメモリ・コンポーネントに格納された命令として実施することができ、デバイス４０２のプロセッサー４０４で実行すると、本明細書に提示する技術によりデバイス４０２を動作させるように構成することができる。例示のシステム４０８は仮想環境１１０を含み、少なくとも１つのアプリケーション１１２がデバイス１０４上で実行している。例示のシステム４０８はまた、仮想環境１１０の外部においてデバイス１０４で実行するワーカー・ホスト・コンポーネント４１０を備えることもでき、実行イベント４０６を伴うワーカー・プロセス１１４を実行するためにアプリケーション１１２から要求を受け取ると、仮想環境１１０の外部においてワーカー・プロセス１１４の実行を開始するように構成することができる。ワーカー・ホスト・コンポーネント４１０は更に、アプリケーション１１２の終了を検出すると、ワーカー・プロセス１１４の終了を控え、そして、ワーカー・プロセス１１４が実行イベント４０６を遂行すると、アプリケーション１１２にワーカー・プロセス１１４の実行イベント４０６について通知するように構成される。このようにして、例示のシステム４０８は、本明細書に示す技術により、デバイス４０２の仮想環境１１０において実行するアプリケーション１１２を代理してワーカー・プロセス１１４の実行を遂行する。
【００１６】
更なる別の実施形態は、本明細書に提示する技術を適用するように構成されるプロセッサー実行可能命令を備えるコンピューター可読媒体を含む。このようなコンピューター可読媒体は、例えば、半導体メモリ（例えば、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、および／または同期型ダイナミック・ランダム・アクセス・メモリ（ＳＤＲＡＭ）技術を利用する半導体）のようなタンジブル・デバイスを含むコンピューター可読ストレージ媒体、ハード・ディスク・ドライブのプラッタ、フラッシュ・メモリ・ドライブ、または磁気若しくは光ディスク（例えば、ＣＤ−Ｒ、ＤＶＤ−Ｒ若しくはフロッピー（登録商標）ディスク）を含むことができる。そして、デバイスのプロセッサーによって実行されると、本明細書に提示する技術をデバイスに実施させるコンピューター可読命令のセットをエンコードする。このようなコンピューター可読媒体はまた、様々な物理現象（例えば、電磁信号、音波信号または光信号）を通じて、並びに様々な有線のシナリオ（例えば、イーサネットまたは光ファイバーケーブルを介して）、および／または無線のシナリオ（例えば、ＷｉＦｉのような無線ローカル・エリア・ネットワーク（ＷＬＡＮ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）のようなパーソナル・エリア・ネットワーク（ＰＡＮ）、またはセルラー若しくは無線ネットワーク）で伝播することができる信号のような様々な種別の通信媒体を（コンピューター可読ストレージ媒体とは別のクラスの技術として）含むことができ、デバイスのプロセッサーによって実行されると、本明細書に提示する技術をデバイスに実施させるコンピューター可読命令のセットをエンコードする。
【００１７】
図５は、これらの方法により考案することができる例示のコンピューター可読媒体について示す。ここでは、実施態様５００は、エンコードされたコンピューター可読データ５０４を有するコンピューター可読媒体５０２（例えば、ＣＤ−Ｒ、ＤＶＤ−Ｒまたはハード・ディスク・ドライブのプラッタ）を含む。このコンピューター可読データ５０４は、本明細書に記載する原理により動作するように構成されるコンピューター命令のセット５０６を含む。このような１つの実施形態では、プロセッサー実行可能命令５０６は、図３における例示の方法３００のようなローカル・イベント１０５に関連するクライアント・アプリケーション１０８の要求を満たす方法４０８を実行するように構成することができる。このような別の実施形態では、プロセッサー実行可能命令５０６は、図４における例示のシステム４０８のようなローカル・イベント２０６に関連するクライアント・アプリケーション１０８の要求を満たすシステムを実装するように構成することができる。幾らかの実施形態では、このコンピューター可読媒体は、このようにして構成されるプロセッサー実行可能命令を格納するように構成されるコンピューター可読ストレージ媒体（例えば、ハード・ディスク・ドライブ、光ディスク、またはフラッシュ・メモリ・デバイス）を含むことができる。このような多くのコンピューター可読媒体は、当該技術分野における当業者によって考案されることもあり、本明細書に提示する技術により動作するように構成される。
Ｄ．変更例
本明細書において検討する技術は多くの態様における変更と共に考案することができる。幾らかの変更例は、追加の利点を提示することができ、および／またはこれらの若しくは他の技術における他の変更例に関する不利な点を低減させることができる。更に、幾らかのバリエーションを組み合わせて実施することができ、また、幾らかの組み合せは、利点の付加および／または相乗効果的な協働による不利な点の低減を特徴とすることができる。当該変更例は、様々な実施形態（例えば、図３の例示の方法３００および図４の例示のシステム４０８）に組み込み、このような実施形態に個々および／または相乗効果的な利点を与えることができる。
Ｄ．シナリオ
これら技術が有する実施形態内で変更できる第１の態様はシナリオに関し、このような技術を利用できる。
【００１８】
この第１の態様における第１の変更例として、本明細書に提示する技術は、サーバー、サーバー・ファーム、ワークステーション、ラップトップ、タブレット、移動体電話、ゲーム・コンソールおよびネットワーク機器のような数多くの種別のデバイス４０２と共に利用することができる。このようなデバイス４０２はまた、有線または無線通信デバイスのようなコンピューティング・コンポーネント、キーボード、マウス、タッチパッド、タッチ・センシティブ・ディスプレイ、マイクロホンおよびジェスチャ・ベースの入力コンポーネントのようなヒューマン入力デバイス、静止またはモーション・カメラ、グローバル位置サービス（ＧＰＳ）デバイス、および他のセンサのような自動入力デバイス、ディスプレイおよびスピーカーのような出力デバイス、並びに、有線および／または無線ネットワーク・コンポーネントのような通信デバイスという様々なものを提供することができる。
【００１９】
この第１の態様における第２の変更例として、本明細書に提示する技術は、様々な形のサーバー１０２（例えばｗｅｂサーバー、ファイル・サーバ、アプリケーション・サーバ、メディア・サーバー、ピア・ツー・ピア共有協働サーバー、データベース・サーバ、電子メール・サーバ、物理的計量モニタリング・サーバー、並びに管理制御およびデータ収集（ＳＣＡＤＡ）オートメーション・サーバのような様々な種別のサーバー１０２と共に利用することができる。
【００２０】
この第１の態様における第３の変更例として、本明細書に提示する技術は、ｗｅｂブラウザー、シミュレーションされたおよび／若しくはエミュレート・バーチャル・マシン、ミドルウェア・プラットフォーム、並びにおよび／または隔離された構成(isolation construct)のような多くの種別の仮想環境１１０で実行するアプリケーション１１２を提供するのに利用することができる。
【００２１】
この第１の態様における第４の変更例として、本明細書に提示する技術は、様々な解釈されたおよび／またはコンパイルされた言語で記述されるｗｅｂアプリケーション、ファイル共有アプリケーション、メディア・レンダリング・アプリケーション、並びにデータ駆動クライアント・アプリケーションのような数多くの種別のアプリケーション１１２を提供するのに利用することができる。
【００２２】
この第１の態様における第５の変更例として、本明細書に提示する技術は、数多くの種別のワーカー・プロセス・ホスト２０２内において多くの種別のワーカー・プロセス１１４を実行することを必要とする。例えば、ワーカー・プロセス１１４は、ＨＴＭＬ５「ｗｅｂワーカー」モデルにより実行されるものの、アプリケーション１１２をホストするｗｅｂブラウザー外で別個のシェルで実行されるＪａｖａＳｃｒｉｐｔスクリプトを含むことができる。代替として、ワーカー・プロセス１１４は、デバイス１０４において、管理コンテキスト（ここでは、管理ランタイムはワーカー・プロセス・ホスト２０２を含む）で実行する、部分的または全体がコンパイルされ且つ最適化により実行するアプリケーションを含むことができる。
他の代替として、ワーカー・プロセス・ホスト２０２は、同一のデバイス上のｗｅｂブラウザー内で実行するアプリケーション１１２を代理して持続的なバックグラウンド処理を実行するように構成されるローカルなｗｅｂサーバーを含むことができる。更に、ワーカー・プロセス１１４は、Ｎｏｄｅ.ｊｓサーバー・サイドのＪａｖａＳｃｒｉｐｔ（登録商標）環境を利用するＪａｖａＳｃｒｉｐｔ（登録商標）のスクリプトを含むことができる。
【００２３】
この第１の態様における第６の変更例として、ワーカー・プロセス１１４は、アプリケーション１１２を代理して、ロング・ランのコンピューター・プロセス（実行イベントにはコンピューター・プロセスの完了が含まれる）、スケジューリング若しくはタイマー・プロセス（実行イベントには、タイムアウト若しくはタイマーの経過が含まれる）、デーモン・プロセスのような持続的に利用可能な機能（実行イベントにはデバイス１０４上で実行する他のプロセスによる機能性の起動が含まれる）、および／または様々な種別のデバイス・イベント１１６のモニタリング（実行イベントには、デバイス１０４のユーザー１０６からのユーザー入力の検出のようなデバイス・イベント１１６について検出したインスタンス、移動体電話デバイスの着信若しくはメッセージの受信のようなコンピューティング環境１０８内に生じるハードウェア若しくはソフトウェア・イベントが含まれる。）を含む数多くの種類のバックグラウンド処理を実行することができる。ワーカー・プロセス１１４は、デバイス・イベント１１６をアプリケーション１１２にレポートし、デバイス・イベント１１６の発生を記録し、またはデバイス・イベント１１６のハンドリングの間に追加のロジックを適用するというように、数多くの種別の処理をこのようなデバイス・イベント１１６に適用することができる。これらの、そして他のシナリオは互換性を有することができ、本明細書に提示する技術を有利に利用することができる。
Ｄ２．ワーカー・プロセス・ホスティング
本明細書に提示する技術について実施形態間で変更できる第２の態様は、仮想環境１１０の外側でワーカー・プロセス１１４の実行をホストする方法を含む。すなわち、ワーカー・プロセス１１４がアプリケーション１１２から受け取られ、仮想環境１１０の外側で実行される一方で、ワーカー・プロセス１１４が、ある種別のプロセス・ホスト無しで仮想環境１１０の外側で実行するのを可能にする。何故ならば、この結果として、デバイス１０４のコンピューティング環境１０８内においてネイティブ・プロセスとして任意の信頼性のないコードを実行するからである。したがって、仮想環境１１０から分離されるにも拘わらず、ワーカー・ホスト１１４の実行は、様々な種別のホスティング・サービスをワーカー・プロセス１１４に提供するワーカー・ホスト・コンポーネント４１０によって対応する(attend)ことができる。
【００２４】
この第２の態様の第１の変更例として、ワーカー・ホスト・コンポーネント４１０は、ホスについての数多くの形態をワーカー・プロセス１１４に適用することができる。第１の実施例として、ワーカー・ホスト・コンポーネント４１０はまた、ワーカー・プロセス１１４に提供される仮想環境１１０がアプリケーション１１２に提供される仮想環境１１０とは別個のものである限りにおいて、仮想環境１１０をワーカー・プロセス１１４に提供することもできる。実際、ワーカー・プロセス１１４に提供される仮想環境は、アプリケーション１１２提供される仮想環境１１０と極めて類似のものとすることができ（例えば、両方のプロセスは、ｗｅｂブラウザーのコンテキストにおいて実行することができる）、また、仮想環境１１０の分離は、ワーカー・プロセス１１４の持続性を、本明細書で提供するアプリケーションのライフ・サイクルとは独立のものとするのを可能にする。加えて、アプリケーション１１２に提供される第１の仮想環境１１０とワーカー・プロセス１１４に提供される第２の（別個の）仮想環境１１０との類似点は、幾らかの利便性および効率性をもたらすことができる。例えば、アプリケーション１１２に適用される同一のセキュリティ・ポリシを、ワーカー・プロセス１１４に適用することができる。例えば、ｗｅｂブラウザー内で実行するｗｅｂアプリケーションは、クロス・ドメイン・セキュリティ・ポリシに従ってしばしば制限される。例えば、ｗｅｂアプリケーションにより、当該ｗｅｂアプリケーションが受信したドメインとの間でインターネットを介した通信のみが可能になる。ワーカー・ホスト・コンポーネント４１０は、ｗｅｂブラウザー内で実行するｗｅｂアプリケーションに適用され、ワーカー・プロセス１１４に関連付けられる同一のクロス・ドメイン・セキュリティ・ポリシに従って、ワーカー・プロセス１１４の実行を制限することができる。例えば、如何なるドメイン、サーバー、またはデバイス１０４にアプリケーション１１２を提供したドメインの外部にあるデバイスとの通信からワーカー・プロセス１１４を制限する。
【００２５】
代替として、ワーカー・ホスト・コンポーネント４１０は、異なる実行モデルを、異なる詳細を有するワーカー・プロセス１１４に提示することができる。このような相違は、アプリケーション１１２（例えば、ユーザー・インターフェースを提示するアドホックのフロント・エンドのコードに適した実行環境）について、およびワーカー・プロセス１１４（例えば、ユーザー・インターフェース無しでコンピューター処理が複雑でロング・ランの処理に適する実行環境）についての異なるコンテキストの観点で選択および／または設計することができる。このような第１の実施例として、ワーカー・プロセス１１４がアプリケーション１１２よりも計算処理的により複雑な処理に利用できるために、ワーカー・ホスト・コンポーネント４１０は部分的および／または全体的に、実行の前若しくは間にワーカー・プロセス１１４をコンパイルする、つまり、コード最適化技術の使用を通じてより性能のより実行を提供することができると共に、アプリケーション１１２は解釈可能なスクリプトとして実行することができる。このような第２の実施例として、ワーカー・ホスト・コンポーネント４１０は、仮想環境１１０におけるアプリケーション１１２のスケジューリングではなく、コンピューティング環境１０８におけるワーカー・プロセス１１４の実行をスケジュールすることができる。例えば、ワーカー・プロセス１１４は、特に、デバイス１０４のアイドル期間の間に長く続く比較的中断されない処理に適するロング・ラン・プロセスとしてスケジュールすることができると共に、アプリケーション１１２は、ユーザー・インターフェース・イベントへの応答のように、高い応答性を有するものの実施の存続が短いコードのセットとしてスケジュールすることができる。このような第３の実施例として、ワーカー・プロセス１１４もは、アプリケーション１１２とは異なるアプリケーション・プログラミング・インターフェース（ＡＰＩ）のセット、例えば、下位レベルのハードウェア、並びにワーカー・プロセス１１４についてのネットワーク通信モジュールおよびアプリケーション１１２についてのユーザー・インターフェース・タイプ・モジュールを提供することができる。このような第４の実施例として、ワーカー・ホスト・コンポーネント４１０は、アプリケーション１１２の仮想環境１１０とは異なるセキュリティ・モデルを提示することができる（例えば、仮想環境の外部で実行するワーカー・プロセスの拡張された性能の観点では、ワーカー・ホスト・コンポーネント４１０を処理するセキュリティは、実行の前およびその間により厳格なコード評価を適用して、不当な(malicious)動作を検出することができる）。反対に、他の観点では、ワーカー・プロセス１１４のセキュリティ・モデルは、仮想環境１１０内で実行するアプリケーション１１２に対するものよりも一層緩和したものとしてもよい。例えば、ワーカー・プロセス１１４と他のデバイス間の通信は、許容可能に増加した通信レイテンシについてより厳密に精査されるので、ワーカー・プロセス１１４は、アプリケーション１１２に適用されるクロス・ドメイン・セキュリティ・ポリシに従って制限されないことがある。例えば、デバイス１０４���第２のデバイスで実行するリモート・プロセスにアクセス可能である場合は、ワーカー・ホスト・コンポーネント４１０は、ワーカー・プロセスで第２のデバイス上で実行するリモート・プロセスの接続要求を受信すると、ワーカー・プロセス１１４でリモート・プロセスを接続する。機能性の拡張は、アプリケーション１１２よりも高レベルの信頼性のワーカー・プロセス１１４を反映することができ、ユーザーの同意に付随させてもよい。例えば、ワーカー・ホスト・コンポーネント４１０は、仮想環境１１０の外部でワーカー・プロセス１１４の実行を開始するオファーをユーザー１０６に提示することができ、ユーザー１０６から当該オファーの承認を受けたときのみ、このような実行を開始することができる。ユーザー１０６はまた、関連するアプリケーション１１２の終了の後に持続しているワーカー・プロセス１１４を検査して、その実行を変更する（例えば、ユーザー１０６による要求を履行してワーカー・プロセス１１４を停止および／または終了する）のを許可されることもできる。
【００２６】
これらの、および他の方法では、ワーカー・プロセス１１４に提供される実行モデルは、アプリケーション１１２に提供される実行モデルとは著しく異なるものであってもよい。このような第１の実施例として、ワーカー・ホスト・コンポーネント４１０は、ワーカー・プロセス１１４について管理された実行（例えば、デバイス１０４のアーキテクチャーにより、メモリ割り当ておよびコンポーネント・アクセスの要求を容易にする）を可能にする管理ランタイムを含むことができる。このような第２の実施例として、ワーカー・ホスト・コンポーネント４１０は、デバイスのｗｅｂブラウザー内でも実行するｗｅｂアプリケーションのサービスにおいてデバイス１０４に展開される、ローカルなｗｅｂサーバーを含み、ローカルｗｅｂサーバー・プロセスとしてワーカー・プロセス１１４を実行するように構成することができる。例えば、ワーカー・ホスト・コンポーネント４１０は、ローカルｗｅｂサーバーのＮｏｄｅ.ｊｓサーバー・サイドのスクリプト・モジュールをターゲットとするＪａｖａＳｃｒｉｐｔ（登録商標）のスクリプトとして設計することができる。このような第３の実施例として、ワーカー・ホスト・コンポーネント４１０は、Ｊａｖａ（登録商標）バーチャル・マシンのような仮想マシンを提供することができる。当該仮想マシンは、仮想環境１１０とは別個に実行し、その結果、アプリケーション１１２のライフ・サイクルからワーカー・プロセスのライフ・サイクルを分離することができる。ワーカー・ホスト・コンポーネント４１０によりワーカー・プロセス１１４に提供される実行環境での多くの選択は、本明細書に提示する技術が利用可能であると共に、これと互換性を有することができる。
【００２７】
図６は、本明細書で提供されるワーカー・ホスト・コンポーネント４１０によるワーカー・プロセス１１４のホストにおける幾らかの変更例を特徴とする例示のシナリオ６００について示す。この例示のシナリオ６００では、本明細書に提示する技術により、デバイス１０４は、アプリケーション１１２を代理するが仮想環境１１０の外側でワーカー・プロセスを実行するワーカー・ホスト・コンポーネント４１０と同様に、アプリケーション１１２を実行する仮想環境１１０を提供する。このような第１の例として、幾らかの観点では、ワーカー・プロセス１１４のホストは、類似のクロス・ドメイン制限ポリシのような仮想環境１１０内でのアプリケーション１１２のホストと類似性を共有することができる。例えば、アプリケーション１１２が第１のサービス（例えば、ｗｅｂアプリケーション・サービス）を提供するサーバー１０２から最初に受信し、ワーカー・プロセス１１４が同一のサーバー１０２との通信６１０を後に開始する場合は、ワーカー・ホスト・コンポーネント４１０は第１サービスを提供するサーバー１０２との通信６１０を許可することができる。しかしながら、ワーカー・プロセスが第１のサービスを提供するサーバー１０２とは異なる他のサーバー６１２によって提供されるサービスとの通信６１２を開始するのを試行する場合には、ワーカー・ホスト・コンポーネント４１０は通信６１２をブロックする（６１６）ことができる。代替としてまたはこれに加えて、ワーカー・プロセス１１４に適用されるセキュリティ・ポリシは、アプリケーション１１２に適用されるものとは、同一、または他の点において異なるようにすることができる。例えば、この例示のシナリオ６００では、デバイス１０４は、相互動作可能な方法で、例えば、整合したシームレスのユーザー経験を複数のデバイス１０４にわたりユーザー１０６に供給するために、共有する拡張データを用いて、同一のユーザー１０６により動作されるデバイス１０４のセットを含むデバイス・メッシュ６０２の一部として動作する。したがって、アプリケーション１１２を提供しているサーバー１０２の外部においてアプリケーション１１２が遠隔プロセス６０６と通信することが許可されていない場合であっても、ワーカー・プロセス１１４は、デバイス・メッシュ６０２において第２のデバイス６０４上で実行する遠隔プロセス６０６と通信すること（６０８）が許可されることができる。
Ｄ３．ワーカー・プロセスの持続性および回復性
これらの技術の実施形態間を変更することができる第３の態様は、ワーカー・プロセス１１４の持続性に関係している。アプリケーション１１２の終了を検出すると、ワーカー・プロセス１１４の実行を終了するのを控えることに加え、本明細書に提示する技術では、ワーカー・プロセス１１４の持続性および回復性を容易にする付加的な技術を利用することができる。
【００２８】
この第３の態様についての第１の変更例として、ワーカー・ホスト・コンポーネント４１０はまた、ワーカー・プロセス１１４により、アプリケーション１１２の終了ではなく仮想環境１１０の終了（例えば、アプリケーション１１２をホストするｗｅｂページをユーザーがクローズした後にも持続させるのではなく、ｗｅｂブラウザーが終了され且つメモリから完全にアンロードされた後にも持続させる）に拘わらず持続させるのを可能にする。つまり、仮想環境１１０を終了すると、デバイス１０４は、ワーカー・プロセス１１４を終了するのを控えることができる。
【００２９】
この第３の態様についての第２の変更例として、ワーカー・ホスト・コンポーネント４１０は、ワーカー・プロセス１１４により、ワーカー・ホスト・コンポーネント４１０の故障（例えば、ワーカー・プロセス１１４を管理するコンポーネントについてのエクセプション、クラッシュまたは終了）に拘わらず持続させるのを可能にする。例えば、ワーカー・ホスト・コンポーネント４１０は、ワーカー・プロセス１１４およびそのソースを実行するリストを定期的に記録することができる。障害がワーカー・ホスト・コンポーネント４１０内で発生した場合は、デバイス１０４は、ワーカー・ホスト・コンポーネント４１０を終了し、デバイスのコンピューティング環境内におけるワーカー・ホスト・コンポーネントの実行を再開し、故障の時間にワーカー・ホスト・コンポーネント４１０内で実行していたワーカー・プロセス１１４の実行を再開することができる。
【００３０】
この第３の態様についての第３の変更例として、ワーカー・ホスト・コンポーネント４１０は、ワーカー・プロセス１１４により、デバイス１０４のコンピューティング環境１０８における重大な変更に拘わらず持続させるのを可能にする。例えば、アプリケーション１１２および／または仮想環境１１０の終了は、再起動のような、デバイス１０４のコンピューティング環境１０８の再スタートのプロセスの間に発生させることができる。したがって、コンピューティング環境１０８を再スタートした後に、デバイスは、ワーカー・プロセス１１４の実行を仮想環境１１０外部で再開することができる。このような第１の実施例として、デバイス１０４は、ワーカー・プロセス１１４を格納することができ、またその状態を周期的に記録することができる。その結果、コンピューティング環境１０８を再スタートした後に、デバイス１０４は、ワーカー・プロセス１１４の実行を比較的最近の状態で再開することができる。このような第２の実施例として、ワーカー・プロセス１１４を受け取り、および／またはサービスとの通信を維持する場合は、デバイス１０４は、コンピューティング環境１０８を再スタートした後に、サービスから第２のワーカー・プロセス１１４（例えば、第１のワーカー・プロセス１１４の状態についての最近の観察またはレポートに基づいて実行を再開するように構成されるワーカー・プロセス１１４）を要求することができ、また、サービスから第２のワーカー・プロセス１１４を受け取ると、デバイス１０４の仮想環境１１０の外側で第２のワーカー・プロセス１１４を実行することができる。このような持続性は、異なるデバイス１０４上でコンピューティング環境１０８を再スタートまたは移行した時、例えば、ユーザー１０６のデバイス・メッシュ６０２内でワーカー・プロセス１１４を第２のデバイス１０４に移行した時に、ワーカー・プロセス１１４によって持続させるのを可能にする。
【００３１】
この第３の態様についての第４の変更例として、ワーカー・プロセス１１４の回復性は、アプリケーション１１２と共有することができる。例えば、アプリケーション１１２を終了したときにワーカー・プロセス１１４を終了するのを控えることに加えて、ワーカー・ホスト・コンポーネント４１０は、仮想環境１１０内においてアプリケーション１１２の実行の再開を検出したときに、終了の前にアプリケーション１１２が開始した如何なる現在実行しているワーカー・プロセス１１４をも識別することができる。また、アプリケーション１１２を当該識別したワーカー・プロセス１１４と再接続することができる。ワーカー・プロセス１１４は、例えば、アプリケーション１１２の終了の期間において、デバイス１０４上に生じている如何なる関連のデバイス・イベント１１６についてもアプリケーション１１２に通知することができる。ワーカー・プロセス１１４の持続性および回復性を拡張する、これらのまたは他の技術は、本明細書に提示する技術の実施を通じて考案することができ、またこの実施との間で互換性を有することができる。
Ｄ４．アプリケーション通知
これら技術についての実施形態間を変更することができる第４の態様は、関連するワーカー・プロセス１１４が実行イベント４０６を遂行すると、アプリケーション１１２に通知する手法を含む。
【００３２】
この第４の態様についての第１の変更例として、アプリケーション１１２の通知は、多くの種別の通知機構を通じて達成することができる。このような第１の実施例は、ワーカー・ホスト・コンポーネント４１０は、単に実行イベント４０６を記録のみすることができ、そして、アプリケーション１１２は、ワーカー・プロセス１１４によって遂行される実行イベント４０６のログを周期的に検査することができる。このような第２の実施例は、通知がメッセージ・パッシングにより成し遂げることができる。例えば、ワーカー・プロセス１１４は、実行イベント４０６を識別および記述する実行イベント通知４１２を生成することができ、仮想環境１１０は実行イベント通知４１２をアプリケーション１１２に提示することができる。このような第３の実施例として、通知はコールバック機構によって遂行することができる。ここでは、アプリケーション１１２は、ワーカー・プロセス１１４が実行イベント４０６を遂行すると呼び出されるコードのメモリ位置を示す。このコードは、例えば、仮想環境１１０内で実行されるアプリケーション１１２の一部、ワーカー・ホスト・コンポーネント４１０によって実行されることになるワーカー・プロセス１１４の一部、ＡＰＩコールのようなコンピューティング環境１０８の機能、またはモバイル・エージェント、抽象構文ツリー、若しくはスクリプトのような別個のコード部を含むことができる。
【００３３】
この第４の態様についての第２の変更例として、ワーカー・プロセス１１４の回復性は、通知の間にアプリケーション１１２まで拡張することができる。このような第１の実施例として、アプリケーションが終了した後にワーカー・プロセス１１４が実行イベント４０６を遂行する場合に、デバイス１０４は、例えばｗｅｂワーカーを生成したｗｅｂアプリケーションのｗｅｂページを再ロードすることにより、仮想環境１１０のアプリケーションを、通知プロセスの一部として再び開始することができる。このような第２の実施例として、通知プロセスの一部として、アプリケーション１１２をユーザー１０６に自動的に提示することができる。例えば、実行イベント４０６を遂行すると、デバイス１０４は、仮想コンピューティング環境１１０および／またはアプリケーション１１２を立ち上げてコンピューティング環境１０８内においてフォアグラウンド提示にする（例えば、ｗｅｂブラウザーをフォアグラウンドとして、アプリケーション１１２を収容するタブに切り替える）。
【００３４】
図７は、デバイス１０４のコンピューティング環境１０８において実施する持続性および回復性のあるワーカー・プロセスを特徴とする例示のシナリオについて示す。この例示のシナリオでは、第１の時点７００では、（コンピューティング環境１０８において仮想環境１１０を含む）ｗｅｂブラウザー７０２は、サーバー１０２からアプリケーション１１２を受け取ることができ、ウェブ・ブラウザ７０２内でアプリケーション１１２の実行を開始することができる。この実行は、あるバックグラウンド処理を提供するためにワーカー・プロセス１１４を必要とすることができ、コンピューティング環境１０８はローカルｗｅｂサーバー７０４のサーバー・プロセスとして実行することができる。加えて、ローカルｗｅｂサーバー７０４は、ワーカー・プロセス１１４、ワーカー・プロセス１１４およびアプリケーション１１２のソースを含むサーバー１０２、並びに定期的にワーカー・プロセス１１４の状態について記録することができる。
【００３５】
第２の時点７０６では、ｗｅｂブラウザー７０２の終了７０８は、ユーザー１０６および／またはデバイス１０４により開始することができ、このような終了７０８は、ｗｅｂブラウザー７０２において実行するアプリケーション１１２を終了するのを含むことができる。しかしながら、本明細書に提示する技術により、ｗｅｂブラウザー７０２の外部のワーカー・プロセス１１４の実行は、アプリケーション１１２および仮想環境１１０の終了７０８に拘わらずワーカー・プロセス１１４により持続するのを可能にする。
【００３６】
第３の時点７１０では、コンピューティング環境１０８はまた終了７１２を経験することもできる（例えば、デバイス１０４の再起動の間）。終了７１２に続く第４の時点７１４では、コンピューティング環境１０８は、再スタートすることができる。再スタートはローカルｗｅｂサーバー７０４が自動的に再び開始するのを伴うことができ、コンピューティング環境１０８の終了７１２の時点においてローカルｗｅｂサーバー７０４によりホストされるワーカー・プロセス１１４の記録を検査することができる。ローカルｗｅｂサーバー７０４は、次いで、サーバー１０２から第２のワーカー・プロセス１１４（例えば、第１の時点７００で開始されたワーカー・プロセス１１４に対する同一のインスタンス、または終了時７１２にワーカー・プロセス１１４の状態を反映した変更したワーカー・プロセス）を受け取ることができる。コンピューティング環境１０８は、このようにして、ワーカー・プロセス１１４の実行を、コンピューティング環境１０８の再スタートの後に、自動的に再開することができる。
【００３７】
第４の時点７１８では、デバイス・イベント１１６は、コンピューティング環境１０８（例えば、ユーザー１０６への着呼）内において生じさせることができる。ワーカー・プロセス１１４がデバイス・イベント１１６（例えば、ワーカー・プロセス１１４の実行イベント４０６として）と関連付けられる場合に、ローカルｗｅｂサーバー７０４は、ワーカー・プロセス１１４にデバイス・イベント１１６を通知することができる。加えて、ワーカー・プロセス１１４は、アプリケーション１１２にデバイス・イベント１１６について通知する（７２０）ことができる。更には、アプリケーション１１２および／またはｗｅｂブラウザー７０２が現在実行していない場合は、デバイス１０４は、ｗｅｂブラウザー７０２および／またはアプリケーション１１２を（例えば、ｗｅｂブラウザー７０２内でページを再ロードすることによって）再開することができ、加えて、ｗｅｂブラウザー７０２をコンピューティング環境１０８内でフォアグラウンド提示にすることができる。このようにして、デバイス１０４は、本明細書に提示する技術のアプリケーションを通じて、アプリケーション１１２の終了、アプリケーション１１２の終了、仮想環境１１０の終了、コンピューター環境１０８の再スタートにも拘わらず持続するワーカー・プロセス１１４について持続性のある実行を遂行することができる。
Ｅ．コンピューティング環境
図８および以降の検討では、本明細書に記載する１つ以上のプロビジョンの実施形態を実施するための適切なコンピューティング環境について簡潔で包括的な説明を行う。図８の動作環境は、適切な動作環境の一例のみにすぎず、使用範囲または動作環境の機能に関して如何なる限定を示唆することを意図するものではない。コンピューティング・デバイスの例には、パーソナル・コンピュータ、サーバー・コンピュータ、ハンドヘルドまたはラップトップ・デバイス、モバイル・デバイス（例えば移動体電話、パーソナル携帯情報機器（ＰＤＡ）、メディア・プレーヤなど）、マルチプロセッサー・システム、コンシューマー電子機器、ミニ・コンピューター、メインフレーム・コンピューター、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境等を含むが、これらに限定されるものではない。
【００３８】
必要というわけではないが、実施形態は、１つ以上のコンピューティング・デバイスによって実行されている「コンピューター可読命令」について一般的なコンテキストで説明する。コンピューター可読命令は、後記するコンピューター可読媒体を介して配給することができる。コンピューター可読命令は、機能、オブジェクト、アプリケーション・プログラミング・インターフェース（ＡＰＩ）およびデータ構造等のようなプログラム・モジュールとして実行することができ、特定のタスクを実行し、または特定の抽象データ型を実装する。通例は、コンピューター可読命令の機能性は、様々な実施形態で所望されるように結合または分散させることができる。
【００３９】
図８は、本明細書に提供する１つ以上の実施形態を実施するように構成されるコンピューティング・デバイス８０２を備えるシステム８００の実施例を示す。１つの構成では、コンピューティング・デバイス８０２は、少なくとも１つの処理ユニット８０６およびメモリ８０８を含む。コンピューティング・デバイスの正確な構成および種別に応じて、メモリ８０８は、揮発性（例えばＲＡＭ）、不揮発性（例えばＲＯＭ、フラッシュ・メモリなど）のもの、またはこれら２つの幾らかの組み合せとすることができる。この構成を図８では点線８０４として示す。
【００４０】
他の実施態様では、デバイス８０２は、追加の特徴および／または機能を含むことができる。例えば、デバイス８０２はまた、磁気ストレージ、光ストレージ等を含むがこれに限定されない追加のストレージ（例えば、着脱可能および／または着脱不能なもの）を含むこともできる。このような追加のストレージを図８ではストレージ８１０として示す。一実施形態では、本明細書に提示する１つ以上の実施形態を実施するコンピューター可読命令は、ストレージ８１０内にあってもよい。ストレージ８１０はまた、他のコンピューター可読命令を格納して、オペレーティング・システム、アプリケーション・プログラム等を実装することもできる。コンピューター可読命令は、例えば、処理ユニット８０６による実行に対し、メモリ８０８にロードすることができる。
【００４１】
本明細書で用いる「コンピューター可読媒体」という用語は、コンピューター・ストレージ媒体を含む。コンピューター・ストレージ媒体は、揮発性および不揮発性、着脱可能および着脱不能な媒体を含み、コンピューター可読命令または他のデータのような情報について記憶するための如何なる方法または技術で実施される。メモリ８０８およびストレージ８１０は、コンピューター・ストレージ媒体の例示である。コンピューター・ストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ若しくは他のメモリ技術、ＣＤ−ＲＯＭ、Ｄｉｇｉｔａｌ Ｖｅｒｓａｔｉｌｅ Ｄｉｓｋ（ＤＶＤ）若しくは他の光ストレージ、磁気セット、磁気テープ、磁気ディスク・ストレージ若しくは他の磁気・ストレージ・デバイス、または所望の情報を格納するために用いることができ、デバイス８０２によってアクセスできる他の如何なる媒体をも含むが、これらに限定されるものではない。いずれの種類のコンピューター・ストレージ媒体も、デバイス８０２の一部とすることができる。
【００４２】
デバイス８０２はまた、デバイス８０２が他のデバイスと通信できる通信接続（１または複数）８１６を含むこともできる。通信接続（１または複数）８１６は、モデム、ネットワーク・インタフェース・カード（ＮＩＣ）、統合ネットワーク・インターフェース、無線周波数送信器／受信器、赤外線ポート、ＵＳＢ接続、または他のコンピューティング・デバイスにコンピューティング・デバイス８０２を接続するための他のインタフェースを含むが、これらに限定されるものではない。通信接続（１または複数）８１６は、有線接続または無線接続を含むことができる。通信接続（１または複数）８１６は、通信媒体を送信および／または受信することができる。
【００４３】
「コンピューター可読媒体」という用語は、通信媒体を含むことができる。通信媒体は、通例、コンピューター可読命令、または搬送波のような「変調データ信号」若しくは他の搬送機構における他のデータを実施し、また如何なる情報デリバリ媒体をも含む。「変調データ信号」という用語は、それがセットされるかまたはこのような方法で変更される特徴の１つのその信号の特徴セットを有する信号を含むことができ、信号内の情報をエンコードする方法で変更される。
【００４４】
デバイス８０２は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、赤外線カメラ、映像入力デバイス、および／または他の如何なる入力デバイスのような入力デバイス（１または複数）８１４を含むことができる。１つ以上のディスプレイ、スピーカー、プリンター、および／または他の如何なる出力デバイスのような出力デバイス（１または複数）８１２も、デバイス８０２に含むことができる。入力デバイス（１または複数）８１４および出力デバイス（１または複数）８１２は、有線接続、無線接続、またはこれらの如何なる組み合わせを介してデバイス８０２に接続することができる。一実施形態では、他のコンピューティング・デバイスからの入力デバイスまたは出力デバイスは、コンピューティング・デバイス８０２用の入力デバイス（１または複数）８１４または出力デバイス（１または複数）８１２として使用することができる。
【００４５】
コンピューター８０２の有する複数のコンポーネントは、バスのような様々な相互接続によって接続することができる。このような相互接続は、ＰＣＩ ＥｘｐｒｅｓｓのようなＰｅｒｉｐｈｅｒａｌ Ｃｏｍｐｏｎｅｎｔ Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）、ユニバーサル・シリアル・バス（ＵＳＢ）、Ｆｉｒｅｗｉｒｅ（ＩＥＥＥ １３９４）、光バス構造等を含むことができる。他の実施形態では、コンピューター８０２の複数のコンポーネントは、ネットワークによって相互接続することができる。例えば、メモリ８０８は、ネットワークによって相互接続される、異なる物理位置にある複数の物理メモリ・ユニットに含まれることができる。
【００４６】
当業者にとって、コンピューター可読命令を格納するのに利用されるストレージ・デバイスはネットワークにわたり分散できることが認識されるであろう。例えば、ネットワーク８１８を介してアクセス可能なコンピューティング・デバイス８２０は、コンピューター可読命令を格納することができ、本明細書に提示する１つ以上の実施形態を実施する。コンピューティング・デバイス８０２は、コンピューティング・デバイス８２０にアクセスすることができ、実行のためのコンピューター可読命令の一部または全部をダウンロードすることができる。代替として、コンピューティング・デバイス８０２は、必要に応じてコンピューター可読命令の一部をダウンロードすることができ、すなわち、幾らかの命令は、コンピューティング・デバイス８０２において実行することができると共に、幾らかはコンピューティング・デバイス８２０において実行することができる。
Ｆ．用語の使用
本主題について構造上の特徴および／または方法論的な行為に特化して言語により説明してきたが、添付の特許請求の範囲において規定される主題は、必ずしも上記の特定の特徴や行為には限定されないことを理解すべきである。それよりかはむしろ、上記の特定の特徴および行為は、特許請求を実施する例示の形態として開示するものである。
【００４７】
本出願で使用した、「コンポーネント」、「モジュール」、「システム」、「インタフェース」等の用語は、全般的に、コンピューター関連エンティティ、ハードウェア、ハードウェアおよびソフトウェアの組み合せ、ソフトウェア、または実行するソフトウェアを指すことを意図するものである。例えば、コンポーネントは、プロセッサー上で起動するプロセス、プロセッサー、オブジェクト、実行可能形式(executable)、実行スレッド、プログラム、および／またはコンピューターとすることができるが、これらに限定されない。実例として、コントローラー上で起動するアプリケーションおよびコントローラーの両方をコンポーネントとすることができる。１つ以上のコンポーネントは、プロセスおよび／または実行スレッド内に常駐することができ、コンポーネントは１つのコンピューターにローカライズされ、および／または２つ以上のコンピューターの間で分散させることができる。
【００４８】
更にまた、特許請求する主題は、規格化されたプログラミングおよび／またはエンジニアリングの技術を用いた方法、装置または製造する物品として実施することができ、ソフトウェア、ファームウェア、ハードウェア、またはこれらの如何なる組み合わせを生産し、コンピューターが開示した主題を実装するのを制御することができる。本明細書で用いる「製造する物品」という用語は、如何なるコンピューター可読デバイス、キャリアまたはメディアからアクセス可能なコンピューター・プログラムを包含することを意図する。もちろん、当業者にとって、特許請求する主題の範囲および趣旨から逸脱することなく、この構成に多くの変更を行うことができるものと認識されるであろう。
【００４９】
実施形態の様々な動作について本明細書に提供している。一実施形態では、説明した１つ以上の動作が１つ以上のコンピューター可読媒体に格納されたコンピューター可読命令を構成することができ、コンピューティング・デバイスにより実行されると、当該コンピューティング・デバイスに説明した動作を実行させることになる。動作の幾らかまたは全てについて説明した順序について、これらの動作が必ず順序依存であることを意図するものとして解釈してはならない。代替の順序付けが、この説明の利益を享受する当業者に認められるであろう。更に、全ての動作が、本明細書に提供する各実施形態に必ずしも存在するわけではないことが理解されるであろう。
【００５０】
更には、「例示の」という語は、例(example)、例(instance)、または図示(illustration)に供することを意味するために用いている。「例示の」として本明細書に記載される如何なる態様または設計も、必ずしも、他の態様または設計に対して優位なものとして解釈すべきではない。それよりかはむしろ、例示のという語の使用は、具体的なやり方で概念を提示することを意図するものである。本出願で用いる、「または(or)」なる語は、排他的(exclusive)「または(or)」ではなく、包括的(inclusive)「または(or)」を意味することを意図するものである。すなわち、他に特定されない場合、またはコンテキストから明らかでない場合は、「ＸはＡまたは(or)Ｂを採用する」は、本来の包括的な順列を何れかを意図する。すなわち、ＸがＡを採用し、ＸがＢを採用し、またはＸがＡとＢの両方を採用する場合は、「ＸはＡまたは(or)Ｂを採用する」は、上記のいずれの下でも充足する。
加えて、本出願および添付の特許請求の範囲で用いる「ａ」および「ａｎ」は、全般的に、他に特定されない場合または単数の形態に向けられることがコンテキストから明らかでない場合には、「１またはそれ以上」を意味するものと解釈することができる。
【００５１】
また、本開示は、１つ以上の実施態様に関して図示および説明してきたが、均等する変更態様および修正態様が、この明細書および添付の図面を読み込んで理解することに基づいて当業者に生じさせるであろう。本開示は、全てのこのような修正態様および変更態様を含み、また、以降の特許請求の範囲のみによって制限される。上記のコンポーネント（例えば、構成要素、リソースなど）によって実行される様々な機能に関しては特に、このようなコンポーネントを説明するのに用いられる用語は、本明細書に示した本開示についての例示の実装態様の機能を実行する開示した構造とは構造的に均等でない場合であっても、説明したコンポーネントについての特定の機能（例えば、機能的な均等物）を実行する如何なるコンポーネントに対応することを意図するものである。加えて、本開示の特定の特徴点が、幾らかの実施態様の１つのみに関して開示した一方で、このような特徴点は、如何なる所与のまたは特定のアプリケーションについて所望され有利となり得るように、他の実施態様の１つ以上と組み合わせてもよい。更にまた、「含む(includes)」、「有する(having)」、「有する(has)」、「有する(with)」なる用語、またはこれらの他の変更例は、発明の詳細な説明または特許請求の範囲のいずれかで用いられ、これら用語は「備える(comprising)」なる用語と同様に含まれることを意図するものである。
【図１】
0006285905.tif 000002
【図２】
0006285905.tif 000003
【図３】
0006285905.tif 000004
【図４】
0006285905.tif 000005
【図５】
0006285905.tif 000006
【図６】
0006285905.tif 000007
【図７】
0006285905.tif 000008
【図８】
0006285905.tif 000009