(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-07-16
(45)【発行日】2024-07-24
(54)【発明の名称】情報処理装置およびプログラム
(51)【国際特許分類】
G06F 9/50 20060101AFI20240717BHJP
【FI】
G06F9/50 150E
(21)【出願番号】P 2023036524
(22)【出願日】2023-03-09
【審査請求日】2023-03-09
(73)【特許権者】
【識別番号】313006647
【氏名又は名称】セイコーソリューションズ株式会社
(74)【代理人】
【識別番号】100165179
【氏名又は名称】田▲崎▼ 聡
(74)【代理人】
【識別番号】100126664
【氏名又は名称】鈴木 慎吾
(74)【代理人】
【識別番号】100161207
【氏名又は名称】西澤 和純
(72)【発明者】
【氏名】工藤 裕章
(72)【発明者】
【氏名】小西 裕志
(72)【発明者】
【氏名】上木 洋介
(72)【発明者】
【氏名】丹野 一也
(72)【発明者】
【氏名】塚本 俊
【審査官】坂東 博司
(56)【参考文献】
【文献】中国特許出願公開第111857616(CN,A)
【文献】中国特許出願公開第111427751(CN,A)
【文献】米国特許出願公開第2007/0005942(US,A1)
【文献】中国特許出願公開第112306646(CN,A)
【文献】右京 和馬,ユーザーを待たせない マルチスレッド&非同期プログラミング入門,日経ソフトウエア 第15巻 第11号 NIKKEI SOFTWARE,日本,日経BP社 Nikkei Business Publications,Inc.,2019年09月24日,第15巻 第11号,64~68,CSND201200470010
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
デフォルトではシングルスレッドで動作するJavaScriptエンジンをマルチスレッド化し、互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行する情報処理装置であって、
メインスレッドと、スレッドプールを有する第1サブスレッドと、が配置され、
前記メインスレッドは、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストを前記第1サブスレッドに通知し、
前記第1サブスレッドは、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する、
情報処理装置。
【請求項2】
前記処理モジュールは、処理ごとに用意され、
前記処理モジュールの中身は、フェーズごとに分割されており、
それぞれの処理ごとの1個の前記処理モジュール内に各フェーズの処理がサブモジュール化されて含まれて
おり、
前記各フェーズは、各々異なるスレッドで実行され、
前記処理モジュールを含む前記リクエストがあった場合、前記第1サブスレッドは、前記処理モジュールを含む前記リクエストを受け取ると、その中に含まれる第1サブモジュールの処理実行を前記第2サブスレッドに依頼し、これに応じて前記第2サブスレッドは、前記第1サブモジュールの処理実行結果を前記第1サブスレッドに返却し、前記第1サブスレッドは当該処理実行結果を受け取り、
前記第1サブスレッドは、前記処理モジュールの中に含まれる第2サブモジュールの処理実行を第3サブスレッドに依頼し、これに応じて前記第3サブスレッドは、前記第2サブモジュールの処理実行結果を前記第1サブスレッドに返却し、前記第1サブスレッドは当該処理実行結果を受け取り、
以上の場合に、前記処理モジュールにおいて、前記第1サブモジュール、前記第2サブモジュールの順に同期処理が行われ、または、前記第1サブモジュールと前記第2サブモジュールとで非同期処理が行われる、
請求項1に記載の情報処理装置。
【請求項3】
前記メインスレッドは、フロントエンドまたはバックエンドにより、前記処理モジュールの前記指定および前記リクエストを受け付ける、
請求項1または請求項2に記載の情報処理装置。
【請求項4】
前記メインスレッドは、表示画面に対してユーザーが行った操作に応じて、前記処理モジュールの前記指定および前記リクエストを受け付ける、
請求項1または請求項2に記載の情報処理装置。
【請求項5】
デフォルトではシングルスレッドで動作するJavaScriptエンジンをマルチスレッド化し、互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行するコンピューターに、
メインスレッドが、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストをスレッドプールを有する第1サブスレッドに通知する機能と、
前記第1サブスレッドが、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報処理装置およびプログラムに関する。
【背景技術】
【0002】
例えば、デフォルトのJavaScriptエンジンは、シングルスレッドで動作する。このため、完全非同期化を実現するためには、複数スレッドの制御を実現することが必要となる。
【0003】
特許文献1に記載されたコンピューターでは、対象プログラムを修正しなくとも、マルチコアプロセッサーによる動作性能向上および省電力化の効果を得ることが図られている。具体的には、当該コンピューターでは、与えられた対象プログラムの複数のスレッドを各々が独立して実行可能な複数のコアを備えるマルチコアプロセッサー上で、当該対象プログラムと、当該対象プログラムのスレッドが動作可能なコアを指定するコア割り当てプログラムと、当該対象プログラムによって発生されたスレッド生成要求に応じて新規スレッドを生成するスレッド生成機能および動作可能に指定された当該コアで当該新規スレッドを動作させるコアアフィニティ機能を備えるオペレーティングシステムとが動作すると共に、当該マルチコアプロセッサーは、当該コア割り当てプログラムの実行により、当該スレッド生成要求の発生を検出するスレッド生成監視機能と、検出された当該スレッド生成要求によって生成された新規スレッドが動作するコアを指定するコア割り当て設定機能とを備える(特許文献1参照。)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の技術では、メインスレッドにスレッドプールを配置した構成では、マルチコアを十分に使用することができなかった。
例えば、処理が集中しがちなメインスレッドにスレッドプールが配置される構成では、処理のボトルネックになるといった問題があった。
【0006】
本開示は、このような事情を考慮してなされたもので、処理をマルチスレッド化した場合に、マルチコアを十分に使用することが可能な情報処理装置およびプログラムを提供することを課題とする。
【課題を解決するための手段】
【0007】
本開示の一態様は、デフォルトではシングルスレッドで動作するJavaScriptエンジンをマルチスレッド化し、互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行する情報処理装置であって、メインスレッドと、スレッドプールを有する第1サブスレッドと、が配置され、前記メインスレッドは、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストを前記第1サブスレッドに通知し、前記第1サブスレッドは、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する、情報処理装置である。
【0008】
本開示の一態様は、デフォルトではシングルスレッドで動作するJavaScriptエンジンをマルチスレッド化し、互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行するコンピューターに、メインスレッドが、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストをスレッドプールを有する第1サブスレッドに通知する機能と、前記第1サブスレッドが、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する機能と、を実現させるためのプログラムである。
【発明の効果】
【0009】
本開示に係る情報処理装置およびプログラムによれば、処理をマルチスレッド化した場合に、マルチコアを十分に使用することが可能である。
【図面の簡単な説明】
【0010】
【
図1】実施形態に係る情報処理装置におけるプログラムの模式的な構成の一例を示す図である。
【
図2】実施形態に係るリクエスト発生時における処理モジュールの呼び出し処理の手順の一例を示す図である。
【
図3】実施形態に係る処理モジュールの模式的な構成例を示す図である。
【
図4】実施形態に係る非同期処理を模式的に示す図である。
【
図5】実施形態に係る派生処理を模式的に示す図である。
【
図6】(A)~(H)は実施形態に係るフロントエンドのマルチコア対応機能有りの結果の一例を示す図である。
【
図7】(A)~(H)は比較例に係るフロントエンドのマルチコア対応機能無しの結果の一例を示す図である。
【
図8】(A)~(H)は実施形態に係るバックエンドのマルチコア対応機能有りの結果の一例を示す図である。
【
図9】(A)~(H)は比較例に係るバックエンドのマルチコア対応機能無しの結果の一例を示す図である。
【
図10】実施形態に係る情報処理装置のハードウェアの構成例を示す図である。
【
図11】比較例に係る情報処理装置におけるプログラムの模式的な構成の一例を示す図である。
【
図12】比較例に係るリクエスト発生時における処理モジュールの呼び出し処理の手順の一例を示す図である。
【発明を実施するための形態】
【0011】
以下、図面を参照し、本開示の実施形態について説明する。
【0012】
本実施形態では、本実施形態に係る情報処理装置およびプログラムをJavaScriptコントローラの非同期処理に適用した場合を示すが、他の非同期処理に適用されてもよい。
デフォルトのJavaScriptエンジンは、シングルスレッドで動作する。このため、完全非同期化を実現するためには、複数スレッドの制御を実現することが必要となる。
本実施形態では、デフォルトではシングルスレッドで動作するJavaScriptエンジンをマルチスレッド化することで完全非同期処理を実現する。
【0013】
図1は、実施形態に係る情報処理装置P1におけるプログラムの模式的な構成の一例を示す図である。
情報処理装置P1は、コンピューターである。
図1には、実施形態に係る情報処理装置P1におけるプログラムの模式的な構成例として、ブラウザ内部1の構成例、および、ブラウザ外部2の構成例を示してある。
【0014】
ここで、本実施形態では、情報処理装置P1は、マルチコアプロセッサーを備えている。そして、当該プログラムは、当該マルチコアプロセッサーを用いて実行される。
本実施形態では、フロントエンドの場合、当該プログラムは、例えば、ウェブアプリケーションの状態制御プログラムであり、ブラウザのメイン制御プログラムである。
また、本実施形態では、バックエンドの場合、当該プログラムは、例えば、サーバーにおけるサービスのメイン制御プログラムである。
【0015】
<ブラウザ内部の構成例>
ブラウザ内部1には、ソフトウェアとして、メインスレッド11と、ワーカスレッドであるアダプタ12と、ワーカスレッドであるm(mは2以上の整数)個のモデル(Model)111-1~111-mと、ワーカスレッドであるm個のステート(State)121-1~121-mと、ワーカスレッドであるm個のアクション(Action)131-1~131-mと、ワーカスレッドでありモデル111-1~111-mに対応する内部処理部112と、ワーカスレッドでありステート121-1~121-mに対応する内部処理部122と、ワーカスレッドでありアクション131-1~131-mに対応する内部処理部132と、が配置される。
このように、本実施形態では、情報処理装置P1において、複数のスレッドが存在する。それぞれのスレッドは、非同期であり、別々のCPU(Central Processing Unit)の資源(コア)を並列的に使用する。
【0016】
ここで、モデル111-1~111-m、ステート121-1~121-mおよびアクション131-1~131-mの数は、例えば、可変である。なお、本実施形態では、説明の便宜上、これらの数(m)が同じである場合を示すが、これらの数が異なる状況があってもよい。
また、本実施形態では、モデル111-1~111-m、ステート121-1~121-mおよびアクション131-1~131-mは、例えば、処理時間が比較的大きいスレッドであることを想定しているが、これに限られない。
【0017】
本実施形態では、モデル、ステートおよびアクションといった各スレッドは、役割分けされている。本実施形態では、一例として、モデルはシステム外の世界の状態認識(インプット処理)のスレッドであり、ステートはモデルに応じたシステム内の状態の変更のスレッドであり、アクションはステートに応じたシステム外の世界への働きかけ(アウトプット処理)のスレッドである。
なお、このような役割分けは一例であり、モデル、スレッドおよびアクションの役割分けとしては、例えば、適用対象となるシステムごとに任意に定められてもよい。
【0018】
メインスレッド11には、ソフトウェアとして、入口部21と、イニシエータ22と、メイン回路23と、が配置される。
ここで、入口部21は、例えば、View(ビュー)、または、Main(メイン)により実現される。このような入口部21は、例えば、画面表示の機能を有していてもよい。
【0019】
本実施形態では、ViewおよびMainは、それぞれ、本実施形態に係るマルチコア対応機能を利用するコンポーネントである。ここで、本実施形態に係るマルチコア対応機能は、対象プログラム(ここでは、ViewおよびMainのプログラム)を修正しなくとも、マルチコアプロセッサーによる動作が可能であり、マルチコアプロセッサーによる動作性能向上および省電力化の効果を得ることができる機能である。
Viewは、モデル111-1~111-m、ステート121-1~121-mおよびアクション131-1~131-mをマルチコア対応機能を介して呼び出すボタンをブラウザに描画する。
Mainは、モデル111-1~111-m、ステート121-1~121-mおよびアクション131-1~131-mをマルチコア対応機能を介して呼び出すHTTP(Hyper Text Transfer Protocol)の機能を有する。
【0020】
本実施形態では、アダプタ12は、メインスレッド11に対して1つ目のサブスレッド(本実施形態では、サブ回路とも呼ぶ。)となる。
アダプタ12には、ソフトウェアとして、n(nは2以上の整数)個のサブ回路ワーカインスタンス41-1~41-nと、スレッドプール42と、が配置される。
ここで、サブ回路ワーカインスタンス41-1~41-nの数(n)は、例えば、固定値であるが、他の例として、可変であってもよい。
また、スレッドプール42は、ディスパッチャであり、タスクをサブスレッドに割り当てるプログラムである。
【0021】
ここで、本実施形態では、メインスレッド11が1つのスレッドであり、アダプタ12が1つのスレッドである。
メインスレッド11は、必要なときに、アダプタ12を呼び出す。
本実施形態では、サブスレッド(アダプタ12)にスレッドプール42が配置されているため、メインスレッド11はアダプタ12に処理を依頼した後にその処理結果を同期して待機する必要がない。
【0022】
本実施形態では、複数のコアが備えられており、それぞれのスレッドはそれぞれ異なるコアに割り当てられる。
ここで、サブ回路ワーカインスタンス41-1~41-nの数としては、特に限定はなく、一例として、マルチコアの総数が8である場合、6(つまり、n=6)であってもよい。この場合、メインスレッド11およびアダプタ12にそれぞれ1つずつのコアが割り当てられる。
また、モデル111-1~111-m、ステート121-1~121-m、アクション131-1~131-mの数としては、特に限定はなく、本実施形態では、総数が同時に最大でn個となる。
【0023】
<ブラウザ外部の構成例>
ブラウザ外部2は、サービス211、あるいは、認可サーバー212、などを有する。
ここで、本実施形態では、ブラウザ内部1とブラウザ外部2とが同じ情報処理装置P1の内部に存在する場合を示すが、他の例として、ブラウザ外部2は別の装置(例えば、情報処理装置P1以外の情報処理装置)に存在してもよい。
例えば、ブラウザ内部1とブラウザ外部2とが、インターネットなどのネットワークを介して接続されてもよい。
【0024】
[処理の例]
図1を参照して、ブラウザ内部1における処理の例を示す。
【0025】
<アプリケーション起動時の処理の例>
アプリケーション起動時の処理の例として、処理T1~処理T4の手順を示す。
【0026】
(処理T1)
入口部21は、イニシエータ22を呼び出す。
この呼び出し処理は、スレッド内の同期処理である。
【0027】
(処理T2)
次に、イニシエータ22は、アダプタ12のサブ回路ワーカインスタンスを作成する。
この作成処理は、スレッド内の同期処理である。
【0028】
(処理T3)
また、イニシエータ22は、スレッドプール42に割り当て可能なコアの個数(本実施形態では、6個)だけサブ回路ワーカインスタンス41-1~41-nの作成をアダプタ12に対して依頼する。
この依頼処理は、スレッド間の非同期処理である。
【0029】
(処理T4)
アダプタ12は、サブ回路ワーカインスタンス41-1~41-nを作成する。
【0030】
<リクエスト発生時の処理の例>
リクエスト発生時の処理の例として、処理S1~処理S12の手順を示す。
【0031】
(処理S1)
入口部21は、メイン回路23に対して、リクエストを引数としてメソッドを呼び出す。
この呼び出し処理は、スレッド内の同期処理である。
【0032】
(処理S2)
次に、メイン回路23は、スレッドプール42に、リクエストを含むメッセージを送信する。
この送信処理は、スレッド間の非同期処理である。
【0033】
(処理S3)
次に、スレッドプール42は、スレッドプール42に対するサブ回路(ここでは、モデル111-i(iは整数))にリクエストの処理を依頼する。
この依頼処理は、スレッド間の非同期処理である。
ここで、モデル111-iは、1以上のモデル(Model)を表す。
【0034】
(処理S4)
次に、モデル111-iは、内部処理部112に、処理実行を依頼する。
この依頼処理は、スレッド内の同期処理である。
【0035】
(処理S5)
次に、内部処理部112は、依頼元のモデル111-iに、処理結果を返却する。
この返却処理は、スレッド内の同期処理である。
【0036】
(処理S6)
次に、モデル111-iは、処理結果の返却を受けたことに応じて、スレッドプール42に、処理完了メッセージを送信する。
この送信処理は、スレッド間の非同期処理である。
【0037】
(処理S7)
次に、ステート121-j(jは整数)に関して、処理S2~処理S6と同様な処理が繰り返される。
ここで、ステート121-jは、1以上のステート(State)を表す。
具体的には、スレッドプール42は、ステート121-jに、リクエストの処理を依頼する。
この依頼処理は、スレッド間の非同期処理である。
【0038】
次に、ステート121-jは、内部処理部122に、処理実行を依頼する。
この依頼処理は、スレッド内の同期処理である。
【0039】
(処理S7aおよび処理S7b)
ここで、内部処理部122は、例えば、ブラウザ外部2にAI(Artificial Intelligence)処理などの依頼を行い(処理S7a)、ブラウザ外部2からの処理結果の返却を受けてもよい(処理S7b)。
この依頼処理および返却処理は、スレッド内の同期処理である。
【0040】
次に、内部処理部122は、依頼元のステート121-jに、処理結果を返却する。
この返却処理は、スレッド内の同期処理である。
【0041】
次に、ステート121-jは、処理結果の返却を受けたことに応じて、スレッドプール42に、処理完了メッセージを送信する。
この送信処理は、スレッド間の非同期処理である。
【0042】
(処理S8)
次に、アクション131-k(kは整数)に関して、処理S2~処理S6と同様な処理が繰り返される。
ここで、アクション131-kは、1以上のアクション(Action)を表す。
具体的には、スレッドプール42は、アクション131-kに、リクエストの処理を依頼する。
この依頼処理は、スレッド間の非同期処理である。
【0043】
次に、アクション131-kは、内部処理部132に、処理実行を依頼する。
この依頼処理は、スレッド内の同期処理である。
【0044】
次に、内部処理部132は、依頼元のアクション131-kに、処理結果(例えば、依頼を受けた報告)を返却する。
この返却処理は、スレッド内の同期処理である。
【0045】
また、アクション131-kは、処理結果の返却を受けたことに応じて、スレッドプール42に、処理完了メッセージを送信する。
この送信処理は、スレッド間の非同期処理である。
【0046】
(処理S9)
ここで、内部処理部132は、例えば、ブラウザ外部2に派生処理の依頼を行ってもよい。
この依頼処理は、スレッド間の非同期処理である。
なお、内部処理部132は、例えば、ブラウザ外部2に派生処理の依頼を行った後に、依頼元のアクション131-kに、処理結果(例えば、依頼を受けた報告)を返却してもよい。
【0047】
(処理S10)
次に、スレッドプール42は、レスポンスを含むメッセージをメイン回路23に送信する。
この送信処理は、スレッド間の非同期処理である。
【0048】
(処理S11)
次に、メイン回路23は、入口部21に、レスポンスを返却する。
この返却処理は、スレッド内の同期処理である。
【0049】
(処理S12)
ここで、処理終了後のサブ回路ワーカインスタンス41-1~41-nは、スレッドプール42に戻される。
処理終了後のサブ回路ワーカインスタンス41-1~41-nをスレッドプール42に戻すとは、スレッドプール42にサブ回路ワーカインスタンス41-1~41-nの状態が使用中でなくなったことを通知することである。本実施形態では、アダプタ12がこの通知を行う。
なお、スレッドプール42は、サブ回路ワーカインスタンス41-1~41-nを保管しているのではなく、サブ回路ワーカインスタンス41-1~41-nの状態(使用中か否か)を管理している。
【0050】
<処理モジュールの指定(処理S2に関する例)>
図2は、実施形態に係るリクエスト発生時における処理モジュールの呼び出し処理の手順の一例を示す図である。
【0051】
(処理S21)
本実施形態では、入口部21は、クライアント(例えば、クライアント端末を操作するユーザー)からリクエストを受け付ける際に、呼び出すべき処理モジュールの指定を受け付ける。
メイン回路23は、入口部21から、クライアントからのリクエストおよび呼び出すべき処理モジュールの指定を受け付ける。
このように、本実施形態では、
図1に示される処理S1において、メイン回路23は、入口部21から、当該リクエストおよび呼び出すべき処理モジュールの指定を受け付ける。
【0052】
(処理S22)
次に、メイン回路23は、リクエストで指定された処理モジュールを呼び出す。
具体的には、本実施形態では、
図1に示される処理S2において、メイン回路23は、処理モジュールの指定を有するリクエストを含むメッセージをスレッドプール42に送信する。
【0053】
(処理S23)
その後、メイン回路23は、スレッドプール42から指定の処理モジュールのレスポンスを含むメッセージを受信した場合、指定された処理モジュールの処理結果を入口部21に返却する。
このように、本実施形態では、
図1に示される処理S11において、メイン回路23は、指定された処理モジュールの処理結果を含むレスポンスを入口部21に返却する。
【0054】
ここで、処理モジュールとしては、特に限定はなく、例えば、ユーザーの登録処理に関するユーザー登録処理モジュール、ユーザーの削除処理に関するユーザー削除処理モジュール、あるいは、ユーザーの更新処理に関するユーザー更新処理モジュールなどであってもよい。
【0055】
このように、本実施形態では、クライアントが、呼び出すべき処理モジュール(機能モジュール)をリクエストに含め、メインスレッド11のメイン回路23は指定された処理モジュールを呼び出す。
したがって、本実施形態では、ブラウザ内部1において処理をマルチスレッド化させる際に、実行が要求され得る処理が増加しても、ブラウザ内部1(例えば、メインスレッド11のメイン回路23など)を改修する必要がなく、保守性が向上する。
ここで、実行が要求され得る処理が増加する場合としては、例えば、新規の処理モジュールが追加される場合などがある。
【0056】
<処理モジュールの構成例>
図3は、実施形態に係る処理モジュールの模式的な構成例を示す図である。
本実施形態では、それぞれの処理モジュールは処理ごとに用意され、それぞれの処理モジュールの中身はフェーズごとに分割されている。このように、それぞれの処理ごとの1個の処理モジュール内に各フェーズの処理がサブモジュール化されて含まれている。これにより、ひとつながりの処理が1つのモジュールとしてまとまっているため、コードの見通しが良くなり、マルチスレッド化において効率化が図られる。
【0057】
本実施形態では、3つのフェーズとして、モデルフェーズ、ステートフェーズ、アクションフェーズがある。本実施形態では、モデルフェーズはシステム外の世界の状態認識(インプット処理)のフェーズであり、ステートフェーズはモデルに応じたシステム内の状態の変更のフェーズであり、アクションフェーズはステートに応じたシステム外の世界への働きかけ(アウトプット処理)のフェーズである。
図3の例では、処理モジュールとして、ユーザー登録処理、ユーザー削除処理、ユーザー変更処理を示してある。
それぞれの処理モジュールは、モデルフェーズの処理と、ステートフェーズの処理と、アクションフェーズの処理を含む。
【0058】
ここで、比較例として、ひとつながりの処理をモデル、ステート、アクションの3つのフェーズに分割して異なるスレッドに実行させる構成を考える。当該構成では、処理をフェーズごとにモジュール化した場合、ひとつながりの処理がコード上で三箇所に分断されてしまい、コードの可読性が低下する。このように、本来はひとつながりである処理が分断されてしまうと、可読性が低くなる。
これに対して、本実施形態では、このような問題を解消することができる。
【0059】
具体例を示す。
本実施形態における具体例として、ユーザー登録処理モジュールについて説明する。なお、他の処理モジュール(ユーザー削除処理モジュール、ユーザー変更処理モジュール)についても同様である。
ユーザー登録処理モジュールを実行する場合、その処理モジュール内にモデルフェーズの処理、ステートフェーズの処理、アクションフェーズの処理が含まれる。そして、ユーザー登録処理モジュールに含まれるモデル、ステート、アクションの各フェーズは各々異なるワーカスレッドで実行される。
【0060】
本実施形態において、ユーザー登録処理モジュールを含むリクエストがあった場合に、アダプタ12が当該リクエストに応答する手順の例を示す。なお、ユーザー登録処理モジュールには、モデル、ステート、アクションの各フェーズに対応するサブモジュール(モデルサブモジュール、ステートサブモジュール、アクションサブモジュール)が含まれる。
アダプタ12は、ユーザー登録処理モジュールを含むリクエストを受け取ると、まず、その中に含まれるモデルサブモジュールの処理実行をモデルのワーカスレッドに依頼する。これに応じて、モデルのワーカスレッドは、モデルサブモジュールの処理実行結果をアダプタ12に返却する。アダプタ12は、当該処理実行結果を受け取る。
次に、アダプタ12は、ユーザー登録処理モジュールのステートサブモジュールの処理をモデルサブモジュールの処理実行結果を引数として実行することをステートのワーカスレッドに依頼する。これに応じて、ステートのワーカスレッドは、ステートサブモジュールの処理実行結果をアダプタ12に返却する。アダプタ12は、当該処理実行結果を受け取る。
そして、アダプタ12は、ユーザー登録処理モジュールのアクションサブモジュールの処理をステートのサブモジュールの処理実行結果を引数として実行することをアクションのワーカスレッドに依頼する。これに応じて、アクションのワーカスレッドは、アクションサブモジュールの処理実行結果をアダプタ12に返却する。アダプタ12は、当該処理実行結果を受け取る。
【0061】
なお、本実施形態では、ユーザー登録処理モジュールなどの処理モジュールにおいて、モデル、ステート、アクションの順に同期処理が行われる場合を示した。
他の例として、モデルでの処理結果をステートで使用しない場合などのように、あるフェーズにおいて他のフェーズの処理結果を使用しない場合には、非同期処理が行われてもよい。つまり、処理モジュールの内容次第では、非同期処理が行われる場合があり得る。
【0062】
一方、上記の比較例における具体例として、ユーザー登録処理について説明する。なお、他の処理(ユーザー削除処理、ユーザー変更処理)についても同様である。
上記の比較例において、ユーザー登録処理を行う場合の手順を示す。なお、モデルモジュール、ステートモジュール、アクションモジュールには、各々、ユーザー登録処理に対応するサブモジュールが含まれる。
アダプタは、ユーザー登録リクエストを受け取ると、まず、モデルモジュールのユーザー登録サブモジュールの処理実行をモデルのワーカスレッドに依頼する。モデルのワーカスレッドは、ユーザー登録サブモジュールの処理実行結果をアダプタに返却する。アダプタは、当該処理実行結果を受ける。
次に、アダプタは、ステートモジュールのユーザー登録処理サブモジュールの処理をモデルモジュールの処理実行結果を引数として実行することをステートのワーカスレッドに依頼する。ステートのワーカスレッドは、ユーザー登録サブモジュールの処理実行結果をアダプタに返却する。アダプタは、当該処理実行結果を受ける。
そして、アダプタは、アクションモジュールのユーザー登録処理サブモジュールの処理をステートモジュールの処理実行結果を引数として実行することをアクションのワーカスレッドに依頼する。アクションのワーカスレッドは、ユーザー登録サブモジュールの処理実行結果をアダプタに返却する。アダプタは、当該処理実行結果を受ける。
【0063】
<非同期処理の例>
図4は、実施形態に係る非同期処理を模式的に示す図である。
図4には、処理の要求元411と、処理の要求先412と、を示してある。
要求元411は、要求先412に対して、処理Aの要求を行う。
要求先412は、当該要求に応じて、処理Aを実行する。
また、要求元411は、当該要求の後に、非同期処理として、処理Bを実行する。
要求先412は、処理Aが完了すると、処理Aの結果を要求元411に通知する。
要求元411は、要求先412から処理Aの結果を取得する。
また、要求元411は、処理Bの結果を取得する。
このように、非同期処理は、要求元411が要求先412のプログラムの完了を待たずに実行を開始する次の処理である。
【0064】
ここで、本実施形態では、例えば、処理の要求元411はメイン回路(例えば、メイン回路23)であり、処理の要求先412はサブ回路(ここでは、アダプタ12であり、その先にスレッドプール42によって割り当てられるワーカスレッドがある。)である。
本実施形態では、メイン回路とサブ回路とは別スレッドであることから、要求元411と要求先412とが別であるという前提(前提1)が満たされている。
また、本実施形態では、ワーカインスタンスのpostMessageメソッドを利用してスレッド間でデータをやり取りしており、要求先412が要求元411に処理結果を送信するという前提(前提2)が満たされている。
また、本実施形態では、メイン回路はイベントループによってタスクを切り替え、要求元411は要求先412から処理結果を取得するという前提(前提3)が満たされている。
このように、メイン回路がサブ回路に要求する処理(要求先412での処理)が3つの前提(前提1~3)を満たすため、要求元411の処理(処理B)は非同期処理となる。
【0065】
<派生処理の例>
図5は、実施形態に係る派生処理を模式的に示す図である。
図5には、処理の要求元511と、処理の要求先512と、を示してある。
要求元511は、要求先512に対して、処理Aの要求を行う。
要求先512は、当該要求に応じて、派生処理として、処理Aを実行する。
また、要求元511は、当該要求の後に、処理Bを実行する。
派生処理の場合、要求先512は、処理Aが完了しても、処理Aの結果を要求元511に通知しない。
要求元511は、処理Bの結果を取得する。
このように、派生処理は、要求先512が要求元511に結果を返すことのない処理である。
【0066】
[マルチコア対応機能の効果の例]
図6~
図9を参照して、フロントエンドおよびバックエンドについて検証結果を示す。
図6および
図8では、本実施形態に係るマルチコア対応機能がある場合を示す。
図7および
図9では、比較例として、本実施形態に係るマルチコア対応機能が無い場合を示す。当該比較例では、入口部(例えば、ViewあるいはMain)は、モデル、ステートおよびアクションを直接(同期的に)呼び出す。
フロントエンドの例としてViewの場合を示し、バックエンドの例としてMainの場合を示す。
【0067】
図6~
図9の例では、マルチコアのコア数が8である場合を示すが、本実施形態ではマルチコアのコア数は他の数であってもよい。また、1個のCPUが実質的に2以上のコアの機能を有していてもよい。
なお、
図6~
図9の例は、概略的な傾向を示すための例示であり、必ずしも厳密な数値を示すものではなく、本実施形態に係る構成はこれらの例示に限定されない。
【0068】
<フロントエンド>
図6の(A)~(H)は、実施形態に係るフロントエンドのマルチコア対応機能有りの結果の一例を示す図である。
図6において、(A)~(H)のグラフは、CPUからなる8個のコアのそれぞれに対応する。
それぞれのグラフにおいて、横軸は時間を表しており、縦軸はCPUの稼働状況を表している。
また、
図6(A)には「負荷開始」のタイミングを示してあり、(B)~(H)についても横軸の時間の範囲は同じである。
図6の(A)~(H)に示されるように、本実施形態に係るマルチコア対応機能有りの場合、複数のコアに処理が十分に分散され、各コアの処理能力を上限まで使い切ることができている。この結果として、処理時間も短縮されている。
【0069】
図7の(A)~(H)は、比較例に係るフロントエンドのマルチコア対応機能無しの結果の一例を示す図である。
図7において、(A)~(H)のグラフは、CPUからなる8個のコアのそれぞれに対応する。
それぞれのグラフにおいて、横軸は時間を表しており、縦軸はCPUの稼働状況を表している。
また、
図7(A)には「負荷開始」のタイミングを示してあり、(B)~(H)についても横軸の時間の範囲は同じである。
図7の(A)~(H)に示されるように、本実施形態に係るマルチコア対応機能無しの場合、複数のコアに負荷が分散されているものの、1スレッド分の計算資源しか利用できていない。
このように、本実施形態に係るマルチコア対応機能有りの方が、本実施形態に係るマルチコア対応機能無しよりも、効率的である。
【0070】
<バックエンド>
図8の(A)~(H)は実施形態に係るバックエンドのマルチコア対応機能有りの結果の一例を示す図である。
図8において、(A)~(H)のグラフは、CPUからなる8個のコアのそれぞれに対応する。
それぞれのグラフにおいて、横軸は時間を表しており、縦軸はCPUの稼働状況を表している。
また、
図8(A)には「負荷開始」のタイミングを示してあり、(B)~(H)についても横軸の時間の範囲は同じである。
図8の(A)~(H)に示されるように、本実施形態に係るマルチコア対応機能有りの場合、複数のコアに処理が十分に分散され、各コアの処理能力を上限まで使い切ることができている。この結果として、処理時間も短縮されている。
【0071】
図9の(A)~(H)は比較例に係るバックエンドのマルチコア対応機能無しの結果の一例を示す図である。
図9において、(A)~(H)のグラフは、CPUからなる8個のコアのそれぞれに対応する。
それぞれのグラフにおいて、横軸は時間を表しており、縦軸はCPUの稼働状況を表している。
また、
図9(A)には「負荷開始」のタイミングを示してあり、(B)~(H)についても横軸の時間の範囲は同じである。
図9の(A)~(H)に示されるように、本実施形態に係るマルチコア対応機能無しの場合、複数のコアに負荷が分散されているものの、1スレッド分の計算資源しか利用できていない。
このように、本実施形態に係るマルチコア対応機能有りの方が、本実施形態に係るマルチコア対応機能無しよりも、効率的である。
【0072】
[情報処理装置のハードウェアの構成例]
図10は、実施形態に係る情報処理装置601のハードウェアの構成例を示す図である。
図10に示される情報処理装置601の構成が、本実施形態に係る情報処理装置P1に適用されてもよい。
情報処理装置601は、コンピューターから構成されており、本実施形態に係るプログラムを実行する。
情報処理装置601は、入出力部621と、記憶部622と、通信部623と、制御部624と、を備える。
【0073】
入出力部621は、入力部と出力部を備える。
入力部は、例えば、ユーザーにより行われる操作を受け付ける操作部などを備える。
出力部は、ユーザーに対して情報を画面に表示する表示部などを備える。
記憶部622は、各種のメモリーを備える。
通信部623は、外部の装置との間で通信を行う。当該通信は、有線の通信であってもよく、あるいは、無線の通信であってもよい。
制御部624は、マルチコアプロセッサー641を備え、各種の処理および制御を行う。
【0074】
[比較例に係る構成例]
図11は、比較例に係る情報処理装置Q1におけるプログラムの模式的な構成の一例を示す図である。
図11には、情報処理装置Q1におけるプログラムの模式的な構成例として、ブラウザ内部1001の構成例、および、ブラウザ外部1002の構成例を示してある。
【0075】
<ブラウザ内部の構成例>
ブラウザ内部1001には、メインスレッド1011と、ワーカスレッドであるm(mは2以上の整数)個のモデル(Model)1111-1~1111-mと、ワーカスレッドであるm個のステート(State)1121-1~1121-mと、ワーカスレッドであるm個のアクション(Action)1131-1~1131-mと、ワーカスレッドでありモデル1111-1~1111-mに対応する内部処理部1112と、ワーカスレッドでありステート1121-1~1121-mに対応する内部処理部1122と、ワーカスレッドでありアクション1131-1~1131-mに対応する内部処理部1132と、が配置される。
【0076】
メインスレッド1011には、入口部1021と、イニシエータ1022と、メイン回路1023と、n(nは2以上の整数)個のサブ回路ワーカインスタンス1041-1~1041-nと、スレッドプール1042と、が配置される。
【0077】
<ブラウザ外部の構成例>
ブラウザ外部1002は、サービス1211、あるいは、認可サーバー1212、などを有する。
【0078】
<アプリケーション起動時の処理>
図11には、アプリケーション起動時の処理として、処理T101および処理T103~T104を示してある。
これらの処理T101および処理T103~T104は、比較例ではメインスレッド1011にサブ回路ワーカインスタンス1041-1~1041-nおよびスレッドプール1042が含められている点を除いて、本実施形態に係る
図1に示される処理T1および処理T3~T4と同様である。
【0079】
<リクエスト発生時の処理>
図11には、リクエスト発生時の処理として、処理S101~S112を示してある。
これらの処理S101~S112のうち処理S101および処理S103~S112は、比較例ではメインスレッド1011にサブ回路ワーカインスタンス1041-1~1041-nおよびスレッドプール1042が含められている点を除いて、本実施形態に係る
図1に示される処理S1および処理S3~S12と同様である。
【0080】
<処理モジュールの指定(処理S102に関する例)>
図12は、比較例に係るリクエスト発生時における処理モジュールの呼び出し処理の手順の一例を示す図である。
【0081】
(処理S1021)
比較例では、入口部1021は、クライアントからリクエストを受け付ける。この際に、比較例では、呼び出すべき処理モジュールの指定を受け付けない。
メイン回路1023は、入口部1021から、クライアントからのリクエストを受け付ける。
このように、比較例では、
図11に示される処理S101において、メイン回路1023は、入口部1021から、当該リクエストを受け付ける。
【0082】
(処理S1022)
次に、メイン回路1023は、リクエストに基づいて、呼び出すべき処理モジュールを判断する。
【0083】
(処理S1023)
次に、メイン回路1023は、判断した処理モジュールを呼び出す。
具体的には、比較例では、
図11に示される処理S102において、メイン回路1023は、自己で判断した処理モジュールの指定を有するリクエストを含むメッセージをスレッドプール1042に送信する。
【0084】
(処理S1024)
その後、メイン回路1023は、スレッドプール1042から指定の処理モジュールのレスポンスを含むメッセージを受信した場合、処理モジュールの処理結果を入口部1021に返却する。
図11の例では、処理S111において、メイン回路1023は、処理モジュールの処理結果を含むレスポンスを入口部1021に返却する。
【0085】
ここで、処理モジュールとしては、特に限定はなく、例えば、ユーザーの登録処理に関するユーザー登録処理モジュール、ユーザーの削除処理に関するユーザー削除処理モジュール、あるいは、ユーザーの更新処理に関するユーザー更新処理モジュールなどであってもよい。
【0086】
このように、比較例では、メイン回路1023が、クライアントからのリクエストに基づいて呼び出すべき処理モジュール(機能モジュール)を判断し、判断した処理モジュールを呼び出す。
【0087】
ここで、比較例では、メイン回路1023は、リクエストに基づいて呼び出すべき処理モジュールを判断する判断ロジックを有しており、当該判断ロジックに基づいて呼び出すべき処理モジュールを決定している。
このため、比較例では、例えば、新規の処理モジュールが追加されるたびに、情報処理装置Q1におけるプログラムの判断ロジックを改修する必要があり、保守性が低いといった問題がある。このような問題は、処理をマルチスレッド化させることに伴う問題である。
これに対して、本実施形態では、クライアントからのリクエストに処理モジュールの指定があることにより、このような問題を解消することができる。
【0088】
[以上の実施形態について]
以上のように、本実施形態に係る情報処理装置P1では、処理をマルチスレッド化した場合に、マルチコアを十分に使用することが可能である。
本実施形態に係るプログラムP1では、メインスレッド11から独立したスレッドプール42を1つ目のサブスレッド(本実施形態では、アダプタ12)に配置した。
【0089】
例えば、負荷の大きい描画など一部の処理はメインスレッドでしか動作しない前提では、メインスレッドに負荷が集中する傾向がある。この前提では、スレッドプールをメインスレッド上に配置すると、スレッドプールのパフォーマンスが低下して、処理のボトルネックになり得る。
これに対して、本実施形態では、このような問題を解消することができる。
【0090】
本実施形態に係る情報処理装置P1では、マルチスレッド化のための汎用的なミドルウェアを実現することが可能である。
本実施形態に係る情報処理装置P1では、例えば、マルチスレッド化のためのコードを集約しており、開発者は情報処理装置P1に処理モジュールを渡してマルチスレッド化させる、ことが行われてもよい。
例えば、JavaScriptでマルチスレッドを利用するためには、開発者が処理ごとにマルチスレッド化のためのコードを書く必要がある。このため、あらゆる処理をマルチスレッド化するためには、膨大なマルチスレッド化のためのコードを書く必要がある。
これに対して、本実施形態では、マルチスレッド化のためのコードを1箇所のミドルウェアに集約し、あらゆる処理がそのミドルウェアを利用することが可能である。これにより、マルチスレッド化のためのコードをあらゆる処理に繰り返し個別に書き加える場合と比べて、本実施形態では、コード量の削減を見込める。このため、上記のような問題を解消することができる。
【0091】
本実施形態に係る情報処理装置P1では、完全非同期化をすることで、ユーザーの要求を満たすために、ハードウェア資源を使い切ることが可能である。
本実施形態に係る情報処理装置P1では、メインスレッド11に対する1つ目のサブスレッド(本実施形態では、アダプタ12)にスレッドプール42を配置することにより、複数のコアに対する負荷分散が十分に可能となる。
【0092】
本実施形態に係る情報処理装置P1では、例えば、コアの数と同じ数のスレッドを用意することで、スレッド過多によるオーバーヘッドを防止することができる。
【0093】
なお、本実施形態に係るマルチコア対応機構が利用されない場合においても、1つのスレッドの負荷はすべてのコアに分散されるが、素の状態では1つのスレッドに割り当てられるだけの計算資源しか利用できず、ハードウェアが持つ計算資源を十分に使い切ることができない。
これに対して、本実施形態に係るマルチコア対応機構を利用することで、ハードウェアが持つ計算資源を十分に使い切ることができる。
【0094】
従来では、1つのメインスレッドにイニシエータとスレッドプールが配置されていたため、これらは1個のコアしか使用することができなかった。
本実施形態では、メインスレッド11とアダプタ12とを別にして、これらが別々のコアを使用することができ、これらが互いに通信することで、完全非同期処理が可能である。
【0095】
なお、本実施形態と特許文献1との相違点を説明しておく。
本実施形態では、サブスレッド(本実施形態では、モデル、ステート、アクション)に処理の割り当てを行うスレッドプールを1つ目のサブスレッド(本実施形態では、アダプタ12)に固定で配置している点で、特許文献1の開示内容とは相違する。本実施形態では、この点により、処理が集中しがちなメインスレッドにスレッドプールが配置されて処理のボトルネックになるといった問題を解消することができる。
従来技術では、処理ごとに必要に応じてスレッドを生成して割り当てるが、本実施形態では、例えば、必要な処理を分解して複数の処理として固定数のサブスレッドに割り当てることにより、スレッドの生成あるいは消去などのスレッド管理で生じるオーバーヘッドを低減することができる。
【0096】
ここで、本実施形態では、JavaScriptにマルチコア対応機構を適用した場合を示したが、他のプログラミング言語に適用されてもよい。
また、本実施形態では、サブスレッドとして、モデル(Model)、ステート(State)、アクション(Action)が用いられる場合を示したが、これに限られず、サブスレッドとしては任意のスレッドが用いられてもよい。
【0097】
また、本実施形態では、メインスレッド11とアダプタ12とが1対1である場合を示したが、他の例として、メインスレッド11とアダプタ12とが1対複数であってもよく、この場合、複数のアダプタ12を管理するメタアダプタがメインスレッド11とアダプタ12との間にインタフェース機能として備えられてもよい。
【0098】
なお、以上に説明した任意の装置における任意の構成部の機能を実現するためのプログラムを、コンピューター読み取り可能な記録媒体に記録し、そのプログラムをコンピューターシステムに読み込ませて実行するようにしてもよい。なお、ここでいう「コンピューターシステム」とは、オペレーティングシステムあるいは周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD(Compact Disc)-ROM(Read Only Memory)等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークあるいは電話回線等の通信回線を介してプログラムが送信された場合のサーバーあるいはクライアントとなるコンピューターシステム内部の揮発性メモリーのように、一定時間プログラムを保持しているものも含むものとする。当該揮発性メモリーは、例えば、RAM(Random Access Memory)であってもよい。記録媒体は、例えば、非一時的記録媒体であってもよい。
【0099】
また、上記のプログラムは、このプログラムを記憶装置等に格納したコンピューターシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピューターシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワークあるいは電話回線等の通信回線のように情報を伝送する機能を有する媒体のことをいう。
また、上記のプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、上記のプログラムは、前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイルであってもよい。差分ファイルは、差分プログラムと呼ばれてもよい。
【0100】
また、以上に説明した任意の装置における任意の構成部の機能は、プロセッサーにより実現されてもよい。例えば、実施形態における各処理は、プログラム等の情報に基づき動作するプロセッサーと、プログラム等の情報を記憶するコンピューター読み取り可能な記録媒体により実現されてもよい。ここで、プロセッサーは、例えば、各部の機能が個別のハードウェアで実現されてもよく、あるいは、各部の機能が一体のハードウェアで実現されてもよい。例えば、プロセッサーはハードウェアを含み、当該ハードウェアは、デジタル信号を処理する回路およびアナログ信号を処理する回路のうちの少なくとも一方を含んでもよい。例えば、プロセッサーは、回路基板に実装された1または複数の回路装置、あるいは、1または複数の回路素子のうちの一方または両方を用いて、構成されてもよい。回路装置としてはIC(Integrated Circuit)などが用いられてもよく、回路素子としては抵抗あるいはキャパシターなどが用いられてもよい。
【0101】
ここで、プロセッサーは、例えば、CPUであってもよい。ただし、プロセッサーは、CPUに限定されるものではなく、例えば、GPU(Graphics Processing Unit)、あるいは、DSP(Digital Signal Processor)等のような、各種のプロセッサーが用いられてもよい。また、プロセッサーは、例えば、ASIC(Application Specific Integrated Circuit)によるハードウェア回路であってもよい。また、プロセッサーは、例えば、複数のCPUにより構成されていてもよく、あるいは、複数のASICによるハードウェア回路により構成されていてもよい。また、プロセッサーは、例えば、複数のCPUと、複数のASICによるハードウェア回路と、の組み合わせにより構成されていてもよい。また、プロセッサーは、例えば、アナログ信号を処理するアンプ回路あるいはフィルター回路等のうちの1以上を含んでもよい。
【0102】
以上、この開示の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この開示の要旨を逸脱しない範囲の設計等も含まれる。
【0103】
[付記]
(構成例1)~(構成例5)を示す。
【0104】
(構成例1)
互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行する情報処理装置であって、
メインスレッドと、スレッドプールを有する第1サブスレッドと、が配置され、
前記メインスレッドは、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストを前記第1サブスレッドに通知し、
前記第1サブスレッドは、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する、
情報処理装置。
【0105】
ここで、
図1の例では、情報処理装置P1が情報処理装置の一例であり、メインスレッド11がメインスレッドの一例であり、アダプタ12が第1サブスレッドの一例であり、モデル111-1~111-m、ステート121-1~121-m、アクション131-1~131-mが第2サブスレッドの一例である。
【0106】
(構成例2)
前記処理モジュールは、処理ごとに用意され、
前記処理モジュールの中身は、フェーズごとに分割されており、
それぞれの処理ごとの1個の前記処理モジュール内に各フェーズの処理がサブモジュール化されて含まれている、
(構成例1)に記載の情報処理装置。
【0107】
(構成例3)
前記メインスレッドは、フロントエンドまたはバックエンドにより、前記処理モジュールの前記指定および前記リクエストを受け付ける、
(構成例1)または(構成例2)に記載の情報処理装置。
【0108】
(構成例4)
前記メインスレッドは、表示画面に対してユーザーが行った操作に応じて、前記処理モジュールの前記指定および前記リクエストを受け付ける、
(構成例1)から(構成例3)のいずれか1項に記載の情報処理装置。
【0109】
情報処理装置を構成するコンピューターにおいて実行されるプログラム(コンピュータープログラム)を提供することも可能である。
(構成例5)
互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行するコンピューターに、
メインスレッドが、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストをスレッドプールを有する第1サブスレッドに通知する機能と、
前記第1サブスレッドが、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する機能と、
を実現させるためのプログラム。
【符号の説明】
【0110】
1、1001…ブラウザ内部、2、1002…ブラウザ外部、11、1011…メインスレッド、12…アダプタ、21、1021…入口部、22、1022…イニシエータ、23、1023…メイン回路、41-1~41-n、1041-1~1041-n…サブ回路ワーカインスタンス、42、1042…スレッドプール、111-1~111-m、1111-1~1111-m…モデル(Model)、112、122、132、1112、1122、1132…内部処理部、121-1~121-m、1121-1~1121-m…ステート(State)、131-1~131-m、1131-1~1131-m…アクション(Action)、211、1211…サービス、212、1212…認可サーバー、411、511…要求元、412、512…要求先、601、P1、Q1…情報処理装置、621…入出力部、622…記憶部、623…通信部、624…制御部、641…マルチコアプロセッサー
【要約】
【課題】処理をマルチスレッド化した場合に、マルチコアを十分に使用することが可能な情報処理装置を提供する。
【解決手段】互いに非同期であって別々のコアを並列的に使用する複数のスレッドを実行する情報処理装置であって、メインスレッドと、スレッドプールを有する第1サブスレッドと、が配置され、前記メインスレッドは、処理モジュールの指定が付されたリクエストを受け付けて、前記処理モジュールの指定および前記リクエストを前記第1サブスレッドに通知し、前記第1サブスレッドは、前記メインスレッドから前記リクエストが通知された場合、前記メインスレッドから通知された前記指定に係る前記処理モジュールに応じて第2サブスレッドに処理を依頼する、情報処理装置。
【選択図】
図1