IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ カシオ計算機株式会社の特許一覧

特開2022-172396キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置
<>
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図1
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図2
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図3
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図4
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図5
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図6
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図7
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図8
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図9
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図10
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図11
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図12
  • 特開-キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022172396
(43)【公開日】2022-11-15
(54)【発明の名称】キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置
(51)【国際特許分類】
   H04L 67/00 20220101AFI20221108BHJP
   H04L 67/02 20220101ALI20221108BHJP
   H04L 67/50 20220101ALI20221108BHJP
【FI】
H04L67/00
H04L67/02
H04L67/50
【審査請求】未請求
【請求項の数】19
【出願形態】OL
(21)【出願番号】P 2022146087
(22)【出願日】2022-09-14
(62)【分割の表示】P 2020053621の分割
【原出願日】2020-03-25
(71)【出願人】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100182936
【弁理士】
【氏名又は名称】矢野 直樹
(72)【発明者】
【氏名】田中 博和
(57)【要約】
【課題】キャッシュを用いて処理を効率化する技術を提供する。
【解決手段】一実施形態に係る情報処理装置は、リクエストと、リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、リクエストに応じたレスポンスを生成するための複数の処理を実行する実行部と、複数の処理の実行結果に基づき生成したレスポンスを、リクエストと対応づけて第1キャッシュに格納する第1格納部と、複数の処理のそれぞれの処理の入力データと対応づけて、処理の実行結果を第2キャッシュに格納する第2格納部と、リクエストに対してレスポンスを返す返信部と、を含む。
【選択図】図5
【特許請求の範囲】
【請求項1】
リクエストと、前記リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行し、
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を第2キャッシュに格納し、
前記複数の処理の実行結果に基づき生成した前記レスポンスを、前記リクエストと対応づけて前記第1キャッシュに格納し、
前記リクエストに対して前記レスポンスを返す、
処理をコンピュータに実行させるキャッシュ管理プログラム。
【請求項2】
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を前記第1キャッシュに格納する、
処理を更に前記コンピュータに実行させる、請求項1に記載のキャッシュ管理プログラム。
【請求項3】
第2のリクエストと、前記第2のリクエストに応じた第2のレスポンスとの対応関係が前記第1キャッシュに格納されている場合、前記第1キャッシュから読み出した前記第2のレスポンスを返し、
前記第2のリクエストと、前記第2のリクエストに応じた前記第2のレスポンスとの対応関係が前記第1キャッシュに格納されていない場合、前記第2のリクエストに応じた前記第2のレスポンスを生成するための複数の処理を実行する、
処理を更に前記コンピュータに実行させる、請求項1または2に記載のキャッシュ管理プログラム。
【請求項4】
前記第2のリクエストに応じた前記第2のレスポンスを生成するための複数の処理のうちの第1の処理の入力データと前記第1の処理の入力データと対応する処理の実行結果との対応関係が前記第2キャッシュに格納されている場合、前記第1の処理の実行結果を前記第2キャッシュから取得する、
処理を更に前記コンピュータに実行させる、請求項3に記載のキャッシュ管理プログラム。
【請求項5】
前記第2のリクエストに応じた前記第2のレスポンスを生成するための複数の処理のうちの第2の処理の入力データと前記第2の処理の入力データと対応する処理の実行結果との対応関係が前記第2キャッシュに格納されていても、前記第2の処理の入力データが第1の条件を満たす処理を指定している場合、前記第2の処理の実行結果を前記第2キャッシュから取得しない、
ことを特徴とする、請求項3または4に記載のキャッシュ管理プログラム。
【請求項6】
前記第2のリクエストは、数式処理に関するリクエストである、
請求項3から5のいずれか1項に記載のキャッシュ管理プログラム。
【請求項7】
前記第2キャッシュに格納する処理は、実行結果が第2の条件を満たす処理については当該処理の入力データと実行結果を前記第2キャッシュに格納しない、
ことを特徴とする、請求項1から6のいずれか1項に記載のキャッシュ管理プログラム。
【請求項8】
前記リクエストに応じた前記レスポンスを生成するための複数の処理は、複数のスレッドのうちのいずれか1つのスレッドが実行し、
前記1つのスレッドは、前記1つのスレッドに割り当てられた前記第2キャッシュに、前記複数の処理のそれぞれの処理の入力データと対応づけて前記処理の実行結果を格納する、
ことを特徴とする請求項1から7のいずれか1項に記載のキャッシュ管理プログラム。
【請求項9】
前記1つのスレッドは、前記複数のスレッドのうちの他のスレッドに割り当てられたキャッシュを参照しない、ことを特徴とする請求項8に記載のキャッシュ管理プログラム。
【請求項10】
前記リクエストと、前記リクエストに応じた前記レスポンスとの対応関係が前記第1キャッシュに格納されている場合、前記リクエストに応じた前記レスポンスを前記第1キャッシュから取得する、
処理を更に前記コンピュータに実行させる、請求項1から9のいずれか1項に記載のキャッシュ管理プログラム。
【請求項11】
前記リクエストに応じた前記レスポンスを生成するための複数の処理においてエラーが発生した場合、サーバに前記リクエストを送信し、
前記サーバから前記リクエストに応じた前記レスポンスを受信する、
処理を更に前記コンピュータに実行させる、請求項1から10のいずれか1項に記載のキャッシュ管理プログラム。
【請求項12】
前記リクエストを受信したことに応じて、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行し、かつ、サーバに前記リクエストを送信し、
前記サーバから前記リクエストに応じた前記レスポンスを受信する、
処理を更に前記コンピュータに実行させる、請求項1から11のいずれか1項に記載のキャッシュ管理プログラム。
【請求項13】
前記サーバから受信した前記レスポンスを前記第1キャッシュに格納する、
請求項11または12に記載のキャッシュ管理プログラム。
【請求項14】
前記サーバは、前記リクエストに応じた複数の処理の実行結果に基づき生成した前記レスポンスを第3キャッシュに格納する、
請求項11から13のいずれか1項に記載のキャッシュ管理プログラム。
【請求項15】
前記第3キャッシュには、他のコンピュータからの第3のリクエストに応じた複数の処理の実行結果から生成された第3のレスポンスが、前記第3のリクエストと対応づけて格納されており、
前記サーバは、前記コンピュータから前記リクエストを受信した場合に、前記リクエストと前記第3のリクエストとが合致すれば、前記リクエストに対する前記レスポンスとして、前記第3のレスポンスを前記コンピュータに通知する、
ことを特徴とする請求項14に記載のキャッシュ管理プログラム。
【請求項16】
前記リクエストは、数式処理に関するリクエストである、
請求項1から15のいずれか1項に記載のキャッシュ管理プログラム。
【請求項17】
請求項1から16のいずれか1項に記載のキャッシュ管理プログラムを配布するサーバ。
【請求項18】
リクエストと、前記リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行し、
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を第2キャッシュに格納し、
前記複数の処理の実行結果に基づき生成した前記レスポンスを、前記リクエストと対応づけて前記第1キャッシュに格納し、
前記リクエストに対して前記レスポンスを返す、
ことを含む、コンピュータが実行するキャッシュ管理方法。
【請求項19】
リクエストと、前記リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行する実行部と、
前記複数の処理の実行結果に基づき生成した前記レスポンスを、前記リクエストと対応づけて前記第1キャッシュに格納する第1格納部と、
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を第2キャッシュに格納する第2格納部と、
前記リクエストに対して前記レスポンスを返す返信部と、
を含む、情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、キャッシュ管理プログラム、サーバ、キャッシュ管理方法、および情報処理装置に関する。
【背景技術】
【0002】
処理の高速化のためにキャッシュが利用されている。例えば、一度利用したデータなどをキャッシュとして保存しておくことで、その後また同じデータを利用する場合に高速に処理を実行することができる。例えば、ウェブ(Web)ブラウザでは、一度閲覧したウェブページやそのウェブページで使われている画像がキャッシュとして記憶装置に保存されている。それにより、同じウェブページを後から再表示する場合、改めてサーバと通信してデータを取得しなくても、キャッシュからデータを読み込むことができるため、表示を高速化することができる。
【0003】
また、キャッシュの利用に関し、オフライン状態でもサーバと通信せずに応答を行うことに関連する技術が知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2011-164749号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、近年、技術の発展に伴い、様々なウェブサービスが提供されるようになっており、それに応じて通信負荷や処理負荷が増大している。そのため、通信負荷や処理負荷を軽減することのできる更なる技術の提供が望まれている。
【0006】
1つの側面では本発明は、キャッシュを用いて処理を効率化する技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の一つの態様の情報処理装置は、リクエストと、リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、リクエストに応じたレスポンスを生成するための複数の処理を実行する実行部と、複数の処理の実行結果に基づき生成したレスポンスを、リクエストと対応づけて第1キャッシュに格納する第1格納部と、複数の処理のそれぞれの処理の入力データと対応づけて、処理の実行結果を第2キャッシュに格納する第2格納部と、リクエストに対してレスポンスを返す返信部と、を含む。
【発明の効果】
【0008】
キャッシュを用いて処理を効率化する技術を提供することができる。
【図面の簡単な説明】
【0009】
図1】実施形態に係るキャッシュ管理システムを例示する図である。
図2】実施形態に係る情報処理装置のブロック構成を例示する図である。
図3】実施形態に係る情報処理装置がリクエストに対して実行する処理の動作フローを例示する図である。
図4】実施形態に係るリクエストと対応するレスポンスを生成する処理を実行するスレッドを例示する図である。
図5】レスポンスの生成の流れを例示する図である。
図6】第1キャッシュを例示する図である。
図7】第1キャッシュに登録されるリクエストとレスポンスとを例示する図である。
図8】第2キャッシュを例示する図である。
図9】実施形態に係るレスポンスを生成する処理の動作フローを例示する図である。
図10】実施形態に係る子スレッドがレスポンスを生成するために実行する処理の動作フローを例示する図である。
図11】入力データと対応する処理の動作フローを例示する図である。
図12】実施形態に係る異なる粒度のキャッシュの利用について説明する図である。
図13】実施形態に係る情報処理装置を実現するためのコンピュータのハードウェア構成を例示する図である。
【発明を実施するための形態】
【0010】
以下、図面を参照しながら、本発明のいくつかの実施形態について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付す。
【0011】
例えば、リクエストと、そのリクエストに対するレスポンスとをキャッシュとして記憶しておくと、次に同じリクエストを受信した場合に、キャッシュに記憶されたレスポンスを読み出して利用することで、再度処理を実行しなくてもよく、高速に処理することができる。
【0012】
ところで、リクエストに対するレスポンスを生成するために実行される複数の処理の実行結果の一部を、別のリクエストに対するレスポンスの生成に流用できることがある。この場合にも、レスポンスを生成するために実行される複数の処理の実行結果がキャッシュされていないと、別の処理で利用することができない。
【0013】
そこで、以下で述べる実施形態では、リクエストに対するレスポンスを生成するために実行される複数の処理について、その処理の入力データと実行結果とを対応づけてキャッシュに保存する。そのため、例えば、別のリクエストを受信した際に、その別のリクエストに対するレスポンスを生成するために実行される処理に、キャッシュされた複数の処理と対応する処理が含まれていれば、キャッシュされた実行結果を用いて処理を高速化することができる。
【0014】
なお、リクエストに対するレスポンスを生成するために実行される処理の実行結果を、別の処理で流用できる状況の例として、同じ処理であれば実行結果が常に同じになる処理が挙げられる。この様な処理の例として、数式処理が挙げられる。数式処理は、例えば、数式の演算結果を出力する処理、数式のグラフを描画する処理、数式およびグラフに対して接線等の別の数式およびグラフを求める処理、データ点群に対し方程式を求めたり、平均や分散などの統計値を求めたりする処理などを含んでよい。
【0015】
近年、ユーザから入力されたリクエストに応じて数式処理を実行し、結果を表示画面に描画する関数電卓などの端末が提供されている。また、端末からウェブブラウザを介してサーバにアクセスし、数式処理のリクエストをサーバに送信すると、そのレスポンスとして数式と対応するグラフなどの演算結果をブラウザの表示領域に表示させるサービスも提供されている。しかしながら、例えば、数式処理を端末上で実行する場合、処理負荷が高く、処理遅延が発生してしまうことがある。また、例えば、ブラウザなどを介して数式処理をサーバに実行させる場合でも、数式処理によっては処理負荷が高く遅延が発生することがあり、或いは、端末とサーバとの間の通信時間により遅延が発生してしまうこともある。そのため、数式処理の処理負荷や通信負荷を低減することのできる更なる技術の提供が望まれている。
【0016】
そして、例えば、こうした数式処理では、同じ数式の演算を実行する場合、演算結果が同じ値になる特性を有している。例えば、異なる数式の演算であっても数式の一部が一致している場合、その一致している部分については演算結果が同じ値になる。そのため、例えば、異なる数式を処理するリクエストであったとしても、数式に共通する部分があれば、その部分では一方のリクエストの演算結果を他方のリクエストの演算に流用することができる。しかしながら、単純にリクエストと、そのリクエストに対するレスポンスとを対応づけてキャッシュしている場合、異なるリクエストが受信された時点で、キャッシュにヒットしないため、一部の処理の演算結果を流用できる場合にもキャッシュにより処理を高速化することができない。以下に例を説明する。
【0017】
例えば、y=x+1という数式をグラフにプロットするリクエストを受信したとする。この場合に、単純にy=x+1をグラフにプロットするリクエストに対して、そのグラフの形状を表す座標値を含むレスポンスを対応づけてキャッシュしておくとする。この場合に、後にy=x+20をグラフにプロットする別のリクエストを受信したとしても、y=x+1をグラフにプロットするリクエストと異なるため、キャッシュにヒットせず、キャッシュを利用できない。
【0018】
しかしながら、y=x+1と、y=x+20とでは、xの部分の演算結果は同じになる。そのため、例えば、xの部分のグラフの形状を示す座標値をキャッシュに保存しておくと、その後にy=x+20をグラフにプロットする別のリクエストを受信した場合にも、xの部分の座標値を流用することができる。それにより、y=x+20のグラフを描画する際の処理量を削減することができる。
【0019】
なお、ここでは、数式処理を例に説明を行っているが、実施形態は数式処理への適用に限定されるものではない。別の実施形態では、文書などの文字列を処理する場合や画像を処理する場合などのその他の処理に実施形態が適用されてもよい。この場合にも、例えば、文字列や画像などの処理を依頼するリクエストと、そのレスポンスとを第1キャッシュ112に格納しつつ、レスポンスの生成のために実行される複数の処理のそれぞれについて、文字列や画像などの処理の入力データと処理の実行結果とを対応づけて第2キャッシュ113に格納するというように実施形態を適用することができる。以下、実施形態を更に詳細に説明する。
【0020】
図1は、実施形態に係るキャッシュ管理システム100を例示する図である。例えば、図1ではキャッシュ管理システム100は、情報処理装置101、サービス提供サーバ102を含む。なお、サービス提供サーバ102は、例えば、サーバとして動作するコンピュータであってよい。サービス提供サーバ102は、別の実施形態では、複数のサーバで構成されていてもよい。そして、図1において、情報処理装置101は、例えば、ブラウザ111を介してサービス提供サーバ102と通信し、サービス提供サーバ102から数式処理に関するサービスを受けてよい。
【0021】
情報処理装置101は、例えば、パーソナルコンピュータ(PC)、モバイルPC、タブレット端末、スマートフォン、携帯電話機などのコンピュータであってよい。情報処理装置101は、リクエストと、リクエストに対するレスポンスとを対応づけて記憶する第1キャッシュ112と、リクエストに対するレスポンスを生成するために実行される複数の処理のそれぞれの、入力データと処理の実行結果とを対応づけて記憶する第2キャッシュ113とを含む。また、情報処理装置101は、例えば、公衆回線網およびインターネットなどのネットワーク105を介してサービス提供サーバ102と接続されていてよい。情報処理装置101は、例えば、ブラウザ111を介してユーザから数式と対応するグラフの描画などの数式処理を要求するリクエストを受け付けると、サービス提供サーバ102にリクエストを送信する。
【0022】
サービス提供サーバ102は、情報処理装置101からリクエストを受信すると、リクエストに対するレスポンスがキャッシュに登録されていないか、第3キャッシュ131を参照する。サービス提供サーバ102は、リクエストと対応するレスポンスが第3キャッシュ131に登録されていれば、そのレスポンスを情報処理装置101に提供する。一方、サービス提供サーバ102は、リクエストと対応するレスポンスが第3キャッシュ131に登録されていなければ、リクエストに対するレスポンスを生成するために実行される複数の処理を、数式処理モジュール141を用いて実行し、得られた演算結果に基づいてレスポンスを生成し、情報処理装置101に返す。なお、数式処理モジュール141は、例えば、コンピュータを用いて数式を記号的に処理するソフトウェアであってよい。数式処理モジュール141の一例は、CAS(Computer algebra system)などの数式処理システムである。
【0023】
また、サービス提供サーバ102は、生成したレスポンスをリクエストと対応づけて第3キャッシュ131に登録する。それにより、以降、同じリクエストを受信した場合、第3キャッシュ131からレスポンスを取得することができるため、サービス提供サーバ102に高速にレスポンスを提供することができる。
【0024】
情報処理装置101は、例えば、受信したレスポンスに基づいて、リクエストと対応する数式やグラフなどを、ブラウザの表示領域に表示させることができる。
【0025】
しかしながら、以上のように、サービス提供サーバ102にリクエストを送信し、クラウド上でリクエストと対応するレスポンスを取得する場合、情報処理装置101とサービス提供サーバ102との間の通信時間などに起因して、レスポンスに基づくグラフの描画などに遅延が生じてしまうことがある。そこで、実施形態では情報処理装置101は、ローカルにおいてリクエストと対応するレスポンスの取得を試みる。以下、情報処理装置101が実行する処理について更に詳細に説明する。
【0026】
図2は、実施形態に係る情報処理装置101のブロック構成を例示する図である。情報処理装置101は、例えば、制御部201、記憶部202、通信部203、および表示部204を含む。制御部201は、情報処理装置101の各部を制御してよい。実施形態では制御部201は、ブラウザ111、数式処理モジュール212、および処理モジュール213を含む。例えば、数式処理モジュール212は、コンピュータを用いて数式を記号的に処理するソフトウェアであってよく、一例では、CASなどの数式処理システムである。処理モジュール213は、例えば、第1キャッシュ112および第2キャッシュ113への情報の読み書きを制御する処理を実行する。処理モジュール213は、例えば、実行部231、第1格納部232、第2格納部233、および返信部234などを含み、またその他の機能部を含んでもよい。記憶部202は、例えば、第1キャッシュ112および第2キャッシュ113などを含む。通信部203は、例えば、制御部201の指示に従って他の装置と通信する。例えば、通信部203は、サービス提供サーバ102と通信してよい。表示部204は、例えば、ディスプレイなどの表示装置であってよく、制御部201の指示に従って情報を表示する。これらの各部の詳細および記憶部202に格納されている情報の詳細については後述する。
【0027】
図3は、実施形態に係る情報処理装置101の制御部201が、リクエストに対して実行する処理の動作フローを例示する図である。例えば、制御部201は、ユーザからブラウザ111を介してリクエストが入力されると、図3の動作フローを開始してよい。
【0028】
ステップ301(以降、ステップを“S”と記載し、例えば、S301と表記する)において情報処理装置101の制御部201は、オンライン環境であるか否かを判定する。例えば、公衆回線網と接続するための基地局からの電波状況が悪かったり、インターネットとの接続状況が悪かったりなど、通信部203による通信がオフライン状態にある場合、制御部201は、S301においてNOと判定してよく、フローはS302に進む。
【0029】
S302において制御部201は、オフライン処理が可能か否かを判定する。例えば、制御部201は、リクエストと対応するレスポンスを生成するために必要なモジュールやプログラムなどが記憶部202に記憶されているかなどに基づいて、オフライン処理が可能か否かを判定してよい。レスポンスの生成のため、WebAssemblyを利用して複数の処理を実行する場合、S302において制御部201は、一例では、ブラウザ111がWebAssemblyに対応しているか否かを判定することで、オフライン処理が可能か否かを判定してよい。また、キャッシュ管理システム100の実装によっては、所定のリクエストについてはサービス提供サーバ102でリクエストを処理するように構成されていることもある。一例として、一部の数式処理については、処理負荷が高かったり、特殊なモジュールを利用したりするため、サービス提供サーバ102でリクエストを処理するように構成されていることが考えられる。このような場合、制御部201は、所定のリクエストを受信した場合に、S302の処理をNOと判定してよい。
【0030】
S302においてオフライン処理が可能でない場合(S302がNO)、フローはS304に進む。この場合、オンライン接続できず、また、オフライン処理も実行できないため、制御部201は、エラーを通知して、本動作フローは終了してよい。
【0031】
一方、S302においてオフライン処理が可能と判定した場合(S302がYES)、フローはS303に進む。S303において制御部201は、リクエストと対応するレスポンスを生成する処理を実行する。レスポンスを生成する処理の詳細については、図9を参照して後述する。そして、S305において制御部201は、レスポンスを出力し、本動作フローは終了する。
【0032】
また、S301においてネットワーク105に接続可能なオンライン環境である場合、制御部201はYESと判定し、フローはS306に進む。S306において制御部201は、オフライン処理が可能か否かを判定する。なお、S306では制御部201は、例えば、S302と同様の処理でオフライン処理が可能か否かを判定してよい。上述のように、オンラインでリクエストと対応するレスポンスをサービス提供サーバ102から取得しようとすると、サービス提供サーバ102との間の通信時間などに起因して処理に遅延が発生してしまうことがある。そのため、オフライン処理が可能である場合(S306がYES)、フローはS307に進めて、オフラインでの処理を進めてよい。
【0033】
S307において制御部201は、リクエストと対応するレスポンスを生成する処理を実行する。S307では、S303と同様の処理が実行されてよい。なお、レスポンスを生成する処理の詳細については、上述のように図9を参照して後述する。
【0034】
S308において制御部201は、リクエストに対して生成したレスポンスがエラーを含むか否かを判定する。なお、エラーは例えば処理がクラッシュしたり、タイムアウトが発生したりなどのエラーであってよい。レスポンスがエラーを含まない場合(S308がNO)、フローはS305に進み、制御部201は得られたレスポンスを出力する。
【0035】
一方、S308においてレスポンスがエラーを含む場合、例えば、リクエストと対応するレスポンスを取得するための処理でエラーが発生しており、まだ正しいレスポンスを取得できていないことがある。この場合、サービス提供サーバ102でリクエストと対応するレスポンスを生成する処理を実行することでレスポンスの生成に成功する可能性がある。そのため、制御部201は、S308でYESと判定し、フローはS309に進む。また、S306においてオフライン処理が可能でない場合(S306がNO)、オンライン環境であればサービス提供サーバ102にレスポンスの生成を依頼することができるため、フローはS309に進む。
【0036】
S309において制御部201は、サービス提供サーバ102にリクエストを送信する。サービス提供サーバ102は、リクエストを受信すると、図1を参照して例示したように、第3キャッシュ131を参照したり、および数式処理モジュール141などに処理を実行させたりしてリクエストと対応するレスポンスを生成し、情報処理装置101に返信する。
【0037】
S310において制御部201は、サービス提供サーバ102からレスポンスを受信する。S311において制御部201は、サービス提供サーバ102に送信したリクエストおよびサービス提供サーバ102からのレスポンスを対応づけて、第1キャッシュ112にレコードを登録する。なお、第1キャッシュ112についての詳細は後述する。それにより、オフライン処理においてエラーが返却される可能性があるリクエストを再度受け付けた場合に、オフライン処理によるエラーの可能性と、通信による遅延とを回避しつつ、正常なレスポンスを返却できる。なお、制御部201は、S311において、例えば、サービス提供サーバ102に送信したリクエストが、実行のたびに結果が変わるランダム関数、シャッフル関数などを含むリクエストである場合、第1キャッシュ112への登録を実行しなくてもよい。また、例えば、制御部201は、S311において、例えば、サービス提供サーバ102から受信したレスポンスが、処理クラッシュ、タイムアウトエラーなどのエラーを含むレスポンスである場合には、第1キャッシュ112への登録を実行しなくてもよい。S311の処理が終了すると、フローはS305に進む。この場合、S305で制御部201は、サービス提供サーバ102から受信したレスポンスを出力し、本動作フローは終了する。
【0038】
以上で述べたように、図3の動作フローによれば、リクエストが入力された場合に、リクエストに応じたレスポンスの生成を情報処理装置101で実行するか、サービス提供サーバ102で実行するかを適切に振り分けることができる。
【0039】
また、図3の動作フローでは、例えば、リクエストと対応するレスポンスの生成がオフライン処理で実行可能な場合には、オフラインで処理を実行する。それにより、情報処理装置101とサービス提供サーバ102との間での通信を減らすことができるため、通信時間に起因する遅延を低減することができる。
【0040】
また、オンライン環境において、オフライン処理ができなかったり、オフライン処理でエラーが発生したりした場合には、制御部201は、サービス提供サーバ102にリクエストを送信する。それにより、オフライン処理でレスポンスを生成できなかった場合に、クラウド上でリクエストと対応するレスポンスの生成を実行することができる。なお、以上の図3の処理ではS308でエラーと判定された場合に、サービス提供サーバ102側にリクエストの処理を依頼しているが、実施形態はこれに限定されるものではない。例えば、別の実施形態では、S307においてローカルでリクエストと対応するレスポンスを生成する処理を実行するとともに、それに並行してS309の処理を実行し、サービス提供サーバ102にリクエストと対応するレスポンスの提供を依頼してもよい。それにより、ローカルでの処理にエラーが発生した後でサービス提供サーバ102にリクエストを送信する場合と比較して、早いタイミングでレスポンスを受信することができる。また、この場合も、受信したレスポンスがエラーでなければ、リクエストと受信したレスポンスとを対応させて、第1キャッシュへ格納してよい。
【0041】
また、オフライン環境においてオフラインでレスポンスの生成を実行できない場合には、ユーザにエラーを通知するため、ユーザはリクエストと対応するレスポンスを生成できないことを知ることができる。
【0042】
続いて、S303およびS307におけるリクエストと対応するレスポンスを生成する処理について説明する。なお、実施形態では、リクエストと対応するレスポンスを生成する処理は、JavaScript(JavaScriptは登録商標)で実装されるメインスレッド401と、WebWorkerを用いて実装される子スレッド402とによりマルチスレッド化されていてよい。
【0043】
図4は、実施形態に係るリクエストと対応するレスポンスを生成する処理を実行するスレッドを例示する図である。図4(a)は、1つのスレッドでレスポンスを生成する場合を例示しており、スレッドは、例えば、JavaScriptを用いて実装することができる。しかしながら、この場合、レスポンスを生成する処理と、グラフをブラウザ111の表示領域に描画する処理などのその他の処理とが1つのスレッドにおいて連続で順次実行されるため、前の処理が完了しなければ次の処理が始められず、例えば、描画の遅延などを招く恐れがある。
【0044】
そのため、一実施形態では、図4(b)に示すように、メインスレッド401に加えて、レスポンスを生成する処理を実行するための少なくとも1つの子スレッド402を実装している。子スレッド402は、例えば、WebWorkerAPIを用いて生成することができる。子スレッド402は、子スレッド402内にキャッシュ機構を持ち、メインスレッド401とメッセージイベント(非同期)で情報のやり取りを行うことができる。図4(b)に示すように、マルチスレッド化することで、メインスレッド401は、子スレッド402にレスポンスを生成させつつ、子スレッド402のレスポンスの生成処理の結果を待たずに、描画などの他の処理を実行することができる。そのため、レスポンスの生成処理に起因して、描画などの他の処理に遅延が発生してしまうことを抑制することができる。なお、一実施形態においては、子スレッド402は、自スレッドに割り当てられたキャッシュを参照するが、他の子スレッド402に割り当てられたキャッシュを参照しなくてもよい。環境によってはWebWorkerを用いて実装される子スレッド402間でキャッシュの参照ができない場合もある。そのため、子スレッド402が他の子スレッド402のキャッシュを参照しないように構成することで、そうした幅広い環境に実施形態を適用することができる。
【0045】
なお、制御部201は、S303およびS307において、例えば、API(Application Programming Interface)を用いてJavaScriptで実装されたメインスレッド401を呼び出すことで、レスポンスを生成する処理を実行してよい。
【0046】
以下、メインスレッド401と、子スレッド402により実行されるレスポンスの生成の流れについて説明する。図5は、レスポンスの生成の流れを例示する図である。リクエストに対して、例えば、上述のS303またはS307の処理で、メインスレッド401が呼び出されると(図5(1))、メインスレッド401は、リクエストと対応するレスポンスが、第1キャッシュ112に格納されているか否かを確認する(図5(2))。
【0047】
図6は、第1キャッシュ112を例示する図である。図6に示す例では、第1キャッシュ112には、キャッシュキー、およびキャッシュキーと対応する値が対応づけて登録されている。第1キャッシュ112においてキャッシュキーにはリクエストが登録されており、値にはリクエストと対応するレスポンスが登録されている。なお、第1キャッシュ112のキャッシュキーには、リクエストそのものが登録されてもよいが、別の実施形態では、例えば、リクエストにハッシュ関数を用いた処理などの所定の処理を実行して得られた値が登録されてもよい。
【0048】
また、図7は、第1キャッシュに登録される、リクエストとレスポンスとの対応関係を例示する図である。図7(a)にはリクエストが例示されており、図7(b)にはリクエストと対応するレスポンスが例示されている。なお、リクエストとレスポンスは、一例では、JSON(JavaScript Object Notation)形式のデータであってよい。図7(a)は、ブラウザの表示画面へのグラフの描画を要求するリクエストを例示しており、グラフを描画するための処理に必要な情報を含む。例えば、図7(a)では、リクエストは、リクエストを識別するための識別子と、描画を要求するグラフを指定するグラフ式と、グラフの範囲を指定する範囲指定とを含む。また、リクエストは、グラフを描画する処理に関する様々な設定情報を含む。設定情報は、例えば、処理において角度にラジアン、度(degree)、およびグラード(grade)のどれを用いるか、および小数点の何桁目を四捨五入するか、複素数が有効か否かなどの演算のオプションを指定する情報であってよい。また、リクエストは、グラフの描画範囲を指定する情報を含む。例えば、図7では、描画範囲として、X軸およびY軸のそれぞれについて、範囲の最大値と最小値、点を打つステップの間隔が指定されている。
【0049】
図7(b)は、リクエストと対応するグラフの描画に必要な情報を含むレスポンスを例示している。例えば、図7(b)ではレスポンスは、グラフに関する情報と、グラフの座標点のリストとを含む。グラフに関する情報は、例えば、グラフのタイプや、レスポンスの生成のために実行される複数の処理でエラーが発生したか否かを示すエラーの有無の情報を含む。また、グラフの座標点のリストは、例えば、グラフの各点での座標の情報を含む。第1キャッシュ112には、例えば、以上のようなリクエストとレスポンスとの組が対応づけて記憶されていてよい。
【0050】
そして、図5(2)では、メインスレッド401は、リクエストと対応するレスポンスが第1キャッシュ112に格納されていれば、第1キャッシュ112に格納されているリクエストと対応するレスポンスを読み出し、そのレスポンスを呼び出し元のブラウザ111に返す(図5(3))。
【0051】
一方、リクエストと対応するレスポンスが第1キャッシュ112に格納されていない場合、メインスレッド401は、リクエストの処理を子スレッド402の処理モジュール213に依頼する(図5(4))。
【0052】
子スレッド402の処理モジュール213は、リクエストを受信すると、第2キャッシュ113を参照したり、数式処理モジュール212に処理を依頼したりしながら、リクエストと対応するレスポンスを生成するための複数の処理を実行する(図5(5))。なお、レスポンスを生成するための複数の処理では、処理モジュール213は、リクエストに含まれる情報を用いて、例えば、数式判定、数式タイプの判定、グラフ点算出…などの複数の処理を実行してよい。これらの例示的な処理の更なる詳細については後述する。
【0053】
そして、処理モジュール213は、例えば、レスポンスを生成するための複数の処理を実行する際に、処理の実行結果が第2キャッシュ113に記憶されていれば、その処理の実行結果を利用して複数の処理の次の処理へと進める。一方、処理の実行結果が第2キャッシュ113に記憶されていなければ、数式処理モジュール212に処理を依頼して処理の実行結果を取得する。なお、数式処理モジュール212に処理を依頼する場合、処理モジュール213は、その処理の入力データと実行結果との組を第2キャッシュ113に登録してよい(図5(6))。
【0054】
図8は、第2キャッシュ113を例示する図である。第2キャッシュ113には、例えば、キャッシュキー、および値が対応づけて登録されている。キャッシュキーは、レスポンスを生成するために実行される複数の処理の処理ごとに、処理において入力される入力データであってよい。入力データは、例えば、リクエストから読み出した一部の情報、複数の処理のうち先に実行された処理の実行結果、それらに基づき生成された情報などを含んでよい。また、値は、その処理の結果であってよい。なお、第2キャッシュ113のキャッシュキーには、処理の入力データそのものが登録されてもよいが、別の実施形態では、例えば、入力データにハッシュ関数を用いた処理など所定の処理を実行して得られた値が登録されてもよい。
【0055】
続いて、子スレッド402の処理モジュール213は、リクエストと対応するレスポンスを複数の処理の実行結果に基づき生成し、メインスレッド401に返す(図5(7))。メインスレッド401は、子スレッド402からレスポンスを受信すると、リクエストとレスポンスとを対応づけて、第1キャッシュ112に保存する(図5(8))。また、メインスレッド401は、子スレッド402から受信したレスポンスをリクエストに対する応答として呼び出し元のブラウザ111に返し(図5(9))、それにより図3のS303またはS307の処理は終了し、次の処理に進む。
【0056】
なお、レスポンスの生成を実行する子スレッド402は、複数実装されていてよく、メインスレッド401は、例えば、タスクキューなどにリクエストを追加することで、複数の子スレッド402のうち空いている子スレッド402にリクエストを順番に処理させてよい。
【0057】
以上の図5のレスポンス生成の流れで述べたように、第1キャッシュ112には、リクエストと、そのリクエストと対応するレスポンスとが対応づけて記憶される。一方、第2キャッシュ113には、リクエストと対応するレスポンスを生成するための実行される複数の処理のそれぞれについて、各処理の入力データと、その処理の実行結果とが対応づけて記憶される。
【0058】
また、メインスレッド401では制御部201は、リクエストを受信した際に、そのリクエストが第1キャッシュ112に登録されているかを確認し、登録されていれば、第1キャッシュ112からリクエストと対応するレスポンスを取得してブラウザ111に返す。そのため、過去に同じリクエストを処理している場合には、第1キャッシュ112を用いて処理を高速化することができる。
【0059】
また、子スレッド402では処理モジュール213として動作する制御部201は、リクエストに対応するレスポンスを生成するための複数の処理を実行する際に、その処理が第2キャッシュ113に登録されているかを確認する。そして、処理が第2キャッシュ113に登録されていれば、制御部201は、第2キャッシュ113から処理の結果を取得し、次の処理に進む。そのため、例えば、受信したリクエストに対して実行される複数の処理の一部が、過去に別のリクエストを処理した際に実行されていれば、第2キャッシュ113を用いて処理を高速化することができる。
【0060】
なお、上述のように、数式処理において処理モジュール213は、リクエストに含まれる情報を用いて、例えば、数式判定、数式タイプの判定、グラフ点算出…などの複数の処理を、数式処理モジュール212に処理を依頼しながら実行する。そして、第2キャッシュ113には、それらの複数の処理の入力データと対応づけて、処理の実行結果が登録されてよい。以下、これらの複数の処理について簡単に例を述べる。
【0061】
(1)数式判定処理
数式判定では処理モジュール213は、例えば、リクエストで指定されるグラフ式が、方程式であるか否かを判定する。例えば、処理モジュール213は、図7(a)のリクエストを受信した場合、リクエストのグラフ式:y=sin(x)を読み出し、y=sin(x)が方程式であるか否かをチェックしてよい。例えば、グラフ化対象の方程式をユーザに入力させる場合、ユーザがグラフ化できない文字列を入力することもある。その場合、処理モジュール213は、数式判定でエラーと判定してよい。グラフ化できない文字列としては、例えば、「3」などの定数項、「y」などの変数項のみが入力された場合、およびイコール(=)や不等式の記述に誤りがある場合などがあげられる。
【0062】
そして、ここでは、y=sin(x)は方程式であるため、以上の数式判定の結果、入力データ:y=sin(x)と、その判定結果である「方程式」とが、図8の第2キャッシュ113の1段目のレコードに登録されている。
【0063】
(2)数式タイプの判定処理
数式タイプの判定では処理モジュール213は、グラフ式“y=sin(x)”が、例えば、直交座標系のy=f(x)タイプ、またはx=f(y)タイプ、極座標系のr=f(θ)タイプなどといったタイプのうちのどのグラフタイプに属するかを判定する。リクエストで指定されるグラフ式の左辺がyであり、右辺がx以外の独立変数を含まない数式であれば、直交座標系のy=f(x)タイプであると判定される。また、グラフ式の左辺がyであり、右辺がx以外の独立変数を含まない数式であれば、直交座標系のx=f(y)タイプであると判定される。さらに、左辺がrであり、右辺がθ以外の独立変数を含まない数式であれば、極座標系のr=f(θ)タイプであると判定される。
【0064】
そして、ここでは、y=sin(x)は直交座標系のy=f(x)タイプであるため、以上の数式タイプの判定の結果、入力データ:y=sin(x)と、その判定結果である「y=f(x)タイプ」とが、図8の第2キャッシュ113の2段目のレコードに登録されている。
【0065】
例えば、以上のように、処理モジュール213は、グラフ式のタイプを決定することができる。なお、以上の数式タイプの判定で述べた工程1から工程3の処理の入力データと、処理の実行結果とが図8の第2キャッシュ113の2段目のレコードに登録されている。
【0066】
(3)グラフ点算出処理
グラフ点算出では処理モジュール213は、リクエストのグラフ式について、描画範囲に含まれるグラフ点の座標値を算出する。例えば、図7(a)のリクエストでは、グラフ式:y=sin(x)と、グラフの範囲として、Xmin:-7.5、Xmax:7.5、Xstep:0.1、Ymin:-7.5、Ymax:7.5、Ystep:0.1が指定されている。制御部201は、グラフ点算出において指定された範囲にあるグラフ点の座標を求めてよい。図8の第2キャッシュ113の3段目のエントリには、グラフ点算出と対応するレコードが登録されている。レコードには、入力データとしてグラフ式:y=sin(x)と、その描画範囲、および、値として処理の実行結果である各点の座標値が登録されている。
【0067】
例えば、以上の(1)~(3)に示したように、制御部201は、リクエストと対応するレスポンスを生成するための複数の処理を実行してよく、その処理の入力データと対応づけて、処理の実行結果が第2キャッシュ113に登録されてよい。なお、上述したレスポンスを生成するための複数な処理は、例示であり、実施形態はこれに限定されるものではない。例えば、実施形態によっては、上述した複数の処理の一部が実行されなくてもよいし、別に更なる処理が実行されてもよい。
【0068】
続いて、以上で述べた、レスポンスの生成処理の流れについて、以下に動作フローを説明する。
【0069】
図9は、実施形態に係るメインスレッド401として動作する制御部201が実行するレスポンスを生成する処理の動作フローを例示する図である。例えば、制御部201は、S303またはS307に進むと、APIなどを介して図9の処理を呼び出して実行してよい。
【0070】
S901においてメインスレッド401として動作する制御部201は、第1キャッシュ112を検索するためのキャッシュキーを生成する。例えば、第1キャッシュ112のキャッシュキーに過去のリクエストが登録されている場合には、制御部201は、キャッシュキーとしてリクエストをそのまま用いてよい。また、例えば、ハッシュ関数を用いた処理などの所定の処理を実行して得られた値が第1キャッシュ112のキャッシュキーに登録されている場合には、制御部201は、リクエストに同様の処理を実行しキャッシュキーを生成してよい。
【0071】
S902において制御部201は、生成したキャッシュキーを用いて第1キャッシュ112を検索し、リクエストと対応するレコードが、第1キャッシュ112に登録されているか否かを判定する。リクエストと対応するレコードが第1キャッシュ112に登録されていない場合(S902がNO)、フローはS906に進む。一方、リクエストと対応するレコードが第1キャッシュ112に登録されている場合(S902がYES)、フローはS903に進む。
【0072】
S903において制御部201は、リクエストが所定の条件を満たすNGリクエストであるか否かを判定する。NGリクエストは、例えば、リクエストに対するレスポンスの内容が実行のたびに変わるリクエストであってよい。これは、例えば、リクエストに対するレスポンスの内容が実行のたびに変わる場合、同じリクエストが第1キャッシュ112に登録されていたとしても、その登録されているレスポンスと、今回のリクエストに対するレスポンスとで内容が変わる可能性があり、キャッシュされた値を流用できないためである。なお、実行のたびに結果が変わるリクエストの例としては、ランダム関数、シャッフル関数などを含むリクエストが挙げられる。
【0073】
S903においてリクエストが所定の条件を満たすNGリクエストでない場合(S903がNO)、フローはS904に進む。S904において制御部201は、第1キャッシュ112からリクエストと対応するレスポンスを取得し、S905において呼び出し元のS303またはS307の処理にレスポンスを返し、本動作フローは終了する。
【0074】
一方、S903においてNGリクエストである場合(S903がYES)、フローはS906に進む。S906において制御部201は、子スレッド402にリクエストの実行を依頼する。例えば、制御部201は、タスクキューにリクエストのタスクを登録し、子スレッド402にリクエストと対応する処理を実行させてよい。
【0075】
S907において制御部201は、子スレッド402からレスポンスを受信する。S908において制御部201は、レスポンスが所定の条件を満たすNGレスポンスであるか否かを判定する。所定の条件を満たすNGレスポンスとしては、例えば、リクエストに対する正しいレスポンスが生成できていない状態を示すエラーレスポンスであってよい。エラーのレスポンスは、例えば、処理クラッシュ、タイムアウトエラーなどを含む。レスポンスがNGレスポンスである場合(S908でYES)、フローはS905に進み、S905で制御部201はNGレスポンスと判定されたレスポンスを呼び出し元のS303またはS307の処理に返してよい。なお、S307にNGレスポンスを返す場合、S308でエラーと判定され、S309の処理でリクエストがサービス提供サーバ102に送信されてよい。それにより、サービス提供サーバ102で処理を行うことができ、リクエストに対する正しいレスポンスが得られる可能性を高めることができる。
【0076】
一方、S908においてレスポンスがNGレスポンスでない場合(S908がNO)、フローはS909に進む。S909において制御部201は、第1キャッシュ112にリクエストとレスポンスとを対応づけて登録し、フローはS905に進み、呼び出し元のS303またはS307の処理にレスポンスを返し、本動作フローは終了する。
【0077】
以上、図9の動作フローによれば、メインスレッド401において制御部201は、リクエストと対応するレスポンスが第1キャッシュ112に登録されている場合、そのレスポンスを返すことができる。そのため、高速にリクエストに対するレスポンスを返すことができる。
【0078】
また、図9の動作フローによれば、メインスレッド401において制御部201は、子スレッド402にリクエストと対応するレスポンスの生成を依頼した場合、子スレッド402から受信したレスポンスを、リクエストと対応づけて第1キャッシュ112に格納する。そのため、以降、同様のリクエストを受信した場合に、第1キャッシュ112に格納されたレスポンスを利用して高速に処理することができる。
【0079】
なお、S909の処理において制御部201は、リクエストがランダム関数、シャッフル関数などを含むNGリクエストである場合、第1キャッシュ112にリクエストとレスポンスを格納しなくてもよい。
【0080】
続いて、子スレッド402として動作する制御部201によるリクエストと対応するレスポンスの生成処理について説明する。図10は、実施形態に係るリクエストと対応するレスポンスを生成するために実行される処理を示す動作フローを例示する図である。子スレッド402において制御部201は、例えば、リクエストと対応するタスクが登録されるタスクキューから、タスクを割り当てられると図10の動作フローを開始してよい。
【0081】
S1001において子スレッド402として動作する制御部201は、割り当てられたタスクのリクエストに基づき、処理において利用される入力データを生成する。一例では制御部201は、リクエストに含まれる情報の一部(例えば、グラフ式など)を入力データとして抽出してよい。
【0082】
S1002において制御部201は、入力データに対して処理を実行する。なお、S1002からS1004の処理は繰り返し処理である。そして、制御部201はS1002において、リクエストに対するレスポンスを生成するための一連の複数の処理を先頭から順に、繰り返しのたびに処理を次の処理に進めながら順次処理を実行してよい。例えば、数式処理であれば一連の複数の処理は、数式判定、数式タイプの判定、グラフ点算出などの処理などを含んでよい。そして、S1003では制御部201は、リクエストに対するレスポンスを生成するための一連の複数の処理が完了しているか否かを判定する。リクエストに対するレスポンスを生成するための一連の複数の処理が完了していない場合(S1003がNO)、フローはS1004に進む。
【0083】
S1004において制御部201は、次の入力データを生成する。例えば、制御部201は、リクエストから別の情報を読み出したり、S1002の処理の実行結果を利用したりして次の入力データを生成してよい。次の入力データを生成するとフローはS1002に戻り、制御部201は、生成した次の入力データを用いて、レスポンスを生成するための一連の複数の処理のうちの次の処理を実行してよい。
【0084】
また、S1003においてリクエストと対応するレスポンスを生成するための一連の複数の処理がすべて完了している場合(S1003がYES)、フローはS1005に進む。
【0085】
S1005において制御部201は、一連の複数の処理の実行結果に基づいてレスポンスを生成し、生成したレスポンスを処理結果が登録されるキューに追加するなどして、メインスレッド401にレスポンスを返してよい。
【0086】
続いて、S1002で実行される処理について図11を参照して説明する。図11は、S1002で実行される入力データと対応する処理の動作フローを例示する図である。例えば、子スレッド402として動作する制御部201は、S1002の処理に進むと、図11の動作フローを開始してよい。
【0087】
S1101において子スレッド402として動作する制御部201は、入力データから第2キャッシュ113を検索するためのキャッシュキーを生成する。例えば、第2キャッシュ113のキャッシュキーに過去の入力データがそのまま登録されている場合には、制御部201は、キャッシュキーとして入力データをそのまま用いてよい。また、例えば、ハッシュ関数を用いた処理など所定の処理を実行して得た値が第2キャッシュ113にキャッシュキーに登録されている場合には、制御部201は、入力データに同様の処理を実行しキャッシュキーを生成してよい。
【0088】
S1102において制御部201は、生成したキャッシュキーを用いて第2キャッシュ113を検索し、入力データと対応するレコードが第2キャッシュ113に登録されているか否かを判定する。入力データと対応するレコードが第2キャッシュ113に登録されている場合(S1102がYES)、フローはS1103に進む。
【0089】
S1103において制御部201は、入力データが第1の条件を満たすNGの処理を指定しているか否かを判定する。NGの処理を指定する入力データは、例えば、実行のたびに結果が変わる処理を指定する入力データであってよい。これは、例えば、実行のたびに処理の実行結果が変わる場合、同じ入力データと対応するレコードが第2キャッシュ113に登録されていたとしても、次の実行で同じ処理の実行結果になるとは限らず、キャッシュされた値を流用できないためである。なお、実行のたびに結果が変わる処理を指定する入力データの例としては、ランダム関数、シャッフル関数などを含む処理を指定する入力データが挙げられる。
【0090】
S1103において入力データが第1の条件を満たすNGの処理を指定していない場合(S1103がNO)、フローはS1104に進む。S1104において制御部201は、第2キャッシュ113から入力データと対応する演算結果を取得し、S1105において演算結果を呼び出し元のS1002の処理に返し、本動作フローは終了する。
【0091】
一方、S1102において入力データと対応するレコードが第2キャッシュ113に登録されていない場合(S1102がNO)、および、S1103において入力データがNGの処理を指定している場合(S1103がYES)、フローはS1106に進む。この場合、第2キャッシュ113から処理の実行結果を取得できないため、S1106において制御部201は、入力データと対応する処理を数式処理モジュール212に処理を依頼する。なお、NGの処理の場合に、S1106で数式処理モジュール212に処理を依頼することで、第2キャッシュ113に登録されている処理の実行結果を流用できない場合にもかかわらず流用してしまうことを回避することができる。また、S1106で数式処理モジュール212に依頼する処理は、例えば、入力データや、リクエストに対するレスポンスを生成するための一連の複数の処理のどの処理を実行するタイミングで図11の処理が呼び出されたかに応じて異なってよい。数式処理モジュール212に依頼する処理は、例えば、数式判定、数式タイプの判定、グラフ点算出などの処理であってよい。
【0092】
S1107において制御部201は、数式処理モジュール212から依頼した処理に対する実行結果を受信する。S1108において制御部201は、処理の実行結果が第2の条件を満たすNGの実行結果であるか否かを判定する。第2の条件を満たすNGの実行結果は、例えば、入力データに対する演算結果の取得に成功していない状態を示すエラーを含む結果であってよい。エラーは、例えば、処理クラッシュ、タイムアウトエラーなどを含む。処理の実行結果が、NGの実行結果の場合(S1108がYES)、S1105でNGの実行結果を呼び出し元のS1002の処理に返してよい。それにより、実行結果を別の処理で流用できないにもかかわらず処理の実行結果を第2キャッシュ113に登録してしまうことを回避することができる。
【0093】
一方、S1108において処理の実行結果がNGの実行結果でない場合(S1108がNO)、フローはS1109に進む。S1109において制御部201は、第2キャッシュ113に入力データと処理の実行結果とを対応づけて登録し、フローはS1105に進み、呼び出し元のS1002の処理に処理の実行結果を返し、本動作フローは終了する。なお、S1109において制御部201は、入力データがランダム関数、シャッフル関数などを含むNGの処理を対象としている場合、第2キャッシュ113に入力データと実行結果を格納しなくてもよい。
【0094】
以上の図10および図11の動作フローによれば、子スレッド402において制御部201は、リクエストと対応するレスポンスを生成するための一連の複数の処理を実行する。そして、制御部201は、一連の複数の処理の実行の際に、処理の実行結果が第2キャッシュ113に登録されていれば、その処理の実行結果を利用するため、高速に処理を実行することができる。
【0095】
一方、制御部201は、一連の複数の処理の実行の際に、処理の実行結果が第2キャッシュ113に登録されていなければ、数式処理モジュール212に処理を依頼し、その処理の入力データと処理の実行結果とを対応づけて第2キャッシュ113に格納する。そのため、以降、同様の処理が実行される場合に、第2キャッシュ113に格納された処理の実行結果を利用して高速に処理を実行することができる。
【0096】
そして、以上で述べた実施形態によれば第1キャッシュ112と第2キャッシュ113には、異なる粒度のデータが登録される。例えば、上述の実施形態では、第1キャッシュ112に登録される情報の粒度は、第2キャッシュ113に登録される情報の粒度よりも大きい。
【0097】
上述のように、第1キャッシュ112では、リクエストとレスポンスとが対応づけて登録される。そのため、入力されたリクエストが第1キャッシュ112に登録されている場合、レスポンスを第1キャッシュ112から読み出して即座に返すことができる。しかしながら、この場合、入力されたリクエストが、第1キャッシュ112に登録されているリクエストと完全に一致しないと処理を早めることができない。
【0098】
一方で、例えば、数式処理のように、リクエストに対するレスポンスを生成するために実行される複数の処理の実行結果の一部を、別のリクエストに対するレスポンスを生成するための処理で流用できることがある。この場合に、上述の実施形態で述べるように、リクエストに応じて実行される複数の処理のそれぞれについて、処理の入力データと、その処理の実行結果とを第2キャッシュ113に登録しておくことで、別のリクエストに対するレスポンスを生成するための処理で実行結果を流用することが可能になる。その結果、リクエストに対するレスポンスを得るための処理を高速化したり、処理負荷を低減したりすることができる。
【0099】
図12は、実施形態に係る異なる粒度のキャッシュの利用について説明する図である。例えば、情報処理装置101において制御部201が、表示部204の表示画面に数式と対応するグラフを描画する処理を実行するものとする。そして、制御部201が、y=sin(x)+aで、0≦a≦10を範囲として、徐々にaの値を1ずつ増加させながら、各対応するグラフを連続的に描画するリクエストを受け付けたとする。
【0100】
この場合に、制御部201は、まずa=0としてy=sin(x)のグラフを生成するための一連の複数の処理を実行し、得られたレスポンスに基づいて表示画面にグラフを表示する。また、制御部201は、y=sin(x)のリクエストと、そのグラフの各点における座標値を含むレスポンスとを第1キャッシュ112に記録する。また更に、実施形態では、リクエストされたy=sin(x)のグラフの生成で実行される複数の処理の入力データと対応づけて、処理の実行結果を第2キャッシュ113に記録する。例えば、制御部201は、y=sin(x)の一部の数式であるy=sin(x)を入力データとして、そのグラフの各点における座標値を第2キャッシュ113に記録してよい。
【0101】
この場合に、例えば、次にa=1としてy=sin(x)+1のグラフを生成する場合、第1キャッシュ112にはy=sin(x)のリクエストと対応するレスポンスしか登録されておらず、y=sin(x)+1とは異なるので第1キャッシュ112からグラフを生成に利用可能な情報を取得することはできない。しかしながら、第2キャッシュ113にはy=sin(x)を入力データとして、そのグラフの各点における座標値が登録されている。そのため、制御部201は、y=sin(x)+1のリクエストに対してグラフを生成する際に、y=sin(x)+1の数式の一部であるsin(x)については、第2キャッシュ113からグラフの座標値を読み出すことができる。そのため、全ての演算を実行する場合と比較して高速に処理を実行することができる。同様に、a=2~10の範囲でy=sin(x)+aのグラフを描画する場合にも第2キャッシュ113からy=sin(x)のグラフの座標値を読み出すことで、処理負荷を低減しつつ、高速に処理することができる。
【0102】
そして、制御部201が、a=10としてy=sin(x)+10のグラフまでを描画した後で、再びy=sin(x)のグラフを描画する場合には、第1キャッシュ112に対応するレスポンスが登録されているため、数式処理モジュール212を用いて演算を実行しなくてもよくなる。そのため、更なる処理負荷の低減と、処理の高速化を図ることができる。
【0103】
なお、ここでは、数式の一部が共通する場合を例に、第2キャッシュ113の情報を利用する例を述べているが、第2キャッシュ113による効果が期待される例は、これに限定されるものではない。例えば、同じ数式で、異なる描画範囲のグラフの描画を指示するリクエストを受信したとする。この場合、数式が同じであるため、例えば、数式判定、数式タイプの判定などの判定結果を、第2キャッシュ113から取得することができ、それにより、処理負荷の低減と、処理の高速化を図ることができる。
【0104】
以上で述べたように、例えば、数式処理などのように、同じ処理であれば実行結果が常に同じになる処理である場合、リクエストに対するレスポンスを生成するために実行される複数の処理の何れかと、別のリクエストに対するレスポンスを生成するために実行される第2の複数の処理の何れかとが、同じであれば、以前に行われた処理の実行結果を、後から行う処理で流用できることがある。この場合に、実施形態によれば、リクエストに対応するレスポンスをキャッシュするだけでなく、レスポンスを生成するために実行される複数の処理の入力データと処理の実行結果とを対応づけてキャッシュするため、処理負荷の低減と処理の高速化を図ることができる。
【0105】
なお、上述の実施形態において、第1キャッシュ112および第2キャッシュ113は、情報処理装置101に記憶されているため、他の装置からのキャッシュの参照は、状況に応じて制限され得る。一方、サービス提供サーバ102の第3キャッシュ131は、サービス提供サーバ102が提供するサービスに接続する複数の情報処理装置101、およびサービスに登録する複数のアカウント間で共有することができる。そのため、第3キャッシュ131では、複数の情報処理装置101およびアカウントからのリクエストに対してレスポンスを提供する際に、多様なリクエストとレスポンスとをキャッシュすることができ、ヒット率を高めることができる。
【0106】
以上において、実施形態を例示したが、実施形態はこれに限定されるものではない。例えば、上述の動作フローは例示であり、実施形態はこれに限定されるものではない。可能な場合には、動作フローは、処理の順番を変更して実行されてもよく、別に更なる処理を含んでもよく、または、一部の処理が省略されてもよい。
【0107】
また、上述の実施形態では、情報処理装置101は、ブラウザ111からメインスレッド401や子スレッド402などを呼び出して、粒度の異なるキャッシュを利用する例を記載している。しかしながら、実施形態はこれに限定されるものではない。例えば、別の実施形態では第1キャッシュ112および第2キャッシュ113は、1つのキャッシュに統合されていてもよい。例えば、上述の図4(a)に示すように、リクエストに対する全ての処理をメインスレッド401で実行する場合に、制御部201は、第1キャッシュ112に、上述の実施形態で第2キャッシュ113に登録されていた処理の入力データと処理の実行結果の情報を登録してもよい。
【0108】
また更に、別の実施形態では制御部201は、第1キャッシュ112と第2キャッシュ113との間で情報を同期する処理を実行してもよい。例えば、制御部201は、第1キャッシュ112に登録されているレコードを第2キャッシュ113に登録する処理を実行してもよく、また、第2キャッシュ113に登録されているレコードを第1キャッシュ112に登録する処理を実行してもよい。それにより、例えば、第1キャッシュ112においても、リクエストと対応するレスポンスを生成するための複数の処理の入力データと、演算結果とを参照することが可能になる。また、例えば、第2キャッシュ113においても、リクエストと、そのリクエストに対応するレスポンスとを参照することが可能になる。そして、このようにキャッシュを構成することで、実装によっては処理の高速化を図ることができる。例えば、上述の実施形態において、子スレッド402が実行する処理を、メインスレッド401にも実行させる場合、メインスレッド401の第1キャッシュ112で、レスポンスを生成するための複数の処理の実行結果を取得できるため、メインスレッド401での処理を高速に実行することが可能になる。
【0109】
また、上述の実施形態では、子スレッド402ごとに第2キャッシュ113を備えさせる例を述べている。この場合、子スレッド402ごとに異なるデータが第2キャッシュ113に蓄積されるため、他の子スレッド402の第2キャッシュ113に登録されているデータを利用できないことがある。しかしながら、実施形態はこれに限定されるものではない。例えば、別の実施形態では制御部201は、或る子スレッド402の或る第2キャッシュ113に新規に登録されたデータを、他の子スレッド402の第2キャッシュ113にも登録して、子スレッド402間で第2キャッシュ113の内容を同期する処理を実行してもよい。或いは、複数の子スレッド402が共通の1つの第2キャッシュ113を参照するように実施形態が構成されてもよい。
【0110】
更には、上述の実施形態では情報処理装置101はブラウザ111を介して処理を実行する例を述べている。そのため、ブラウザ111と関連するJavaScript、およびWebWorkerなどの仕様に起因して実装の形態が制限されることがある。しかしながら、実施形態はブラウザ111を介した処理に限定されるものではない。例えば、別の実施形態ではブラウザ111は利用されなくてもよい。例えば、実施形態は情報処理装置101において数式と対応するグラフの描画などを実行するアプリケーションに実装されてもよい。この場合、制御部201は、第1キャッシュ112および第2キャッシュ113の登録内容を1つのキャッシュに登録および管理して処理を実行してもよい。
【0111】
また、上述の実施形態では、図9の処理で第1キャッシュ112にヒットし、リクエストがNGリクエストでもない場合には、子スレッド402にリクエストの処理を依頼せずに、処理を終了している。しかしながら、別の実施形態では、第1キャッシュ112にヒットし、リクエストがNGリクエストでもない場合にも子スレッド402にリクエストの処理を依頼してもよい。例えば、リクエストがそれほどなく、制御部201の処理能力に余裕がある場合に、このように子スレッド402に処理をさせることで、第2キャッシュ113に処理の入力データと実行結果を蓄積させることができる。
【0112】
なお、上述の実施形態において、S1002の処理で制御部201は、例えば、実行部231として動作する。また、S909の処理で制御部201は、例えば、第1格納部232として動作する。S1109の処理で制御部201は、例えば、第2格納部233として動作する。S905の処理で制御部201は、例えば、返信部234として動作する。
【0113】
図13は、実施形態に係る情報処理装置101を実現するためのコンピュータ1300のハードウェア構成を例示する図である。図13の情報処理装置101を実現するためのハードウェア構成は、例えば、プロセッサ1301、メモリ1302、記憶装置1303、読取装置1304、通信インタフェース1306、入出力インタフェース1307、入力装置1311および表示装置1312を備える。なお、プロセッサ1301、メモリ1302、記憶装置1303、読取装置1304、通信インタフェース1306、入出力インタフェース1307は、例えば、バス1308を介して互いに接続されている。
【0114】
プロセッサ1301は、例えば、シングルプロセッサであっても、マルチプロセッサやマルチコアであってもよい。プロセッサ1301は、例えば、プログラムを読み出して実行することで、上述の実施形態の制御部201、ブラウザ111、数式処理モジュール212、メインスレッド401、子スレッド402(処理モジュール213)などとして動作してよい。また、プロセッサ1301は、メモリ1302を利用して例えば上述の動作フローの手順を記述したキャッシュ管理プログラムなどのプログラムを実行することにより、実行部231、第1格納部232、第2格納部233、および返信部234として動作する。
【0115】
メモリ1302は、例えば半導体メモリであり、RAM領域およびROM領域を含んでいてよい。記憶装置1303は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、または外部記憶装置である。なお、RAMは、Random Access Memoryの略称である。また、ROMは、Read Only Memoryの略称である。
【0116】
読取装置1304は、プロセッサ1301の指示に従って着脱可能記憶媒体1305にアクセスする。着脱可能記憶媒体1305は、例えば、半導体デバイス、磁気的作用により情報が入出力される媒体、光学的作用により情報が入出力される媒体などにより実現される。なお、半導体デバイスは、例えば、USB(Universal Serial Bus)メモリである。また、磁気的作用により情報が入出力される媒体は、例えば、磁気ディスクである。光学的作用により情報が入出力される媒体は、例えば、CD-ROM、DVD、Blu-ray Disc等(Blu-rayは登録商標)である。CDは、Compact Discの略称である。DVDは、Digital Versatile Diskの略称である。
【0117】
記憶部202は、例えばメモリ1302、記憶装置1303、および着脱可能記憶媒体1305を含んでいる。例えば、記憶装置1303には、第1キャッシュ112、および第2キャッシュ113が格納されている。
【0118】
通信インタフェース1306は、プロセッサ1301の指示に従って、他の装置と通信する。一例では、通信インタフェース1306は、有線または無線通信でネットワーク105を介してサービス提供サーバ102とデータを送受信してよい。通信インタフェース1306は、上述の通信部203の一例である。
【0119】
入出力インタフェース1307は、例えば、入力および出力を行う装置との間のインタフェースであってよい。入出力インタフェース1307は、例えば、例えばユーザからの指示を受け付けるキーボード、マウス、タッチパネルなどの入力装置1311と接続されていてよい。また、入出力インタフェース1307は、例えば、表示装置1312と接続されている。表示装置1312は、例えば、ディスプレイおよびプロジェクタなどの情報を表示する装置であってよい。例えば、図12の表示画面は、入出力インタフェース1307に接続された表示装置1312に描画されてよい。表示装置1312は、上述の表示部204の一例である。入出力インタフェース1307は、例えばスピーカなどの音声装置およびプリンタなどの印刷装置といったその他の出力装置と接続されていてもよい。
【0120】
実施形態に係る各プログラムは、例えば、下記の形態で情報処理装置101に提供される。
(1)記憶装置1303に予めインストールされている。
(2)着脱可能記憶媒体1305により提供される。
(3)プログラムサーバなどのサーバ1330からネットワーク105を介して提供される。
【0121】
なお、サーバ1330は、一例では、図13のコンピュータ1300のハードウェア構成を有していてよい。
【0122】
なお、図13を参照して述べた情報処理装置101を実現するためのコンピュータ1300のハードウェア構成は、例示であり、実施形態はこれに限定されるものではない。例えば、上述の構成の一部が、削除されてもよく、また、新たな構成が追加されてもよい。また、別の実施形態では、例えば、上述の制御部201の一部または全部の機能がFPGA、SoC、ASIC、およびPLDなどによるハードウェアとして実装されてもよい。なお、FPGAは、Field Programmable Gate Arrayの略称である。SoCは、System-on-a-chipの略称である。ASICは、Application Specific Integrated Circuitの略称である。PLDは、Programmable Logic Deviceの略称である。
【0123】
以上において、いくつかの実施形態が説明される。しかしながら、実施形態は上記の実施形態に限定されるものではなく、上述の実施形態の各種変形形態および代替形態を包含するものとして理解されるべきである。例えば、各種実施形態は、その趣旨および範囲を逸脱しない範囲で構成要素を変形して具体化できることが理解されよう。また、前述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態が実施され得ることが理解されよう。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して、または実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施され得ることが当業者には理解されよう。
【0124】
以上の実施形態に関し、更に以下の付記を開示する。
[付記1]
リクエストと、前記リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行し、
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を第2キャッシュに格納し、
前記複数の処理の実行結果に基づき生成した前記レスポンスを、前記リクエストと対応づけて前記第1キャッシュに格納し、
前記リクエストに対して前記レスポンスを返す、
処理をコンピュータに実行させるキャッシュ管理プログラム。
[付記2]
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を前記第1キャッシュに格納する、
処理を更に前記コンピュータに実行させる、付記1に記載のキャッシュ管理プログラム。
[付記3]
第2のリクエストと、前記第2のリクエストに応じた第2のレスポンスとの対応関係が前記第1キャッシュに格納されている場合、前記第1キャッシュから読み出した前記第2のレスポンスを返し、
前記第2のリクエストと、前記第2のリクエストに応じた前記第2のレスポンスとの対応関係が前記第1キャッシュに格納されていない場合、前記第2のリクエストに応じた前記第2のレスポンスを生成するための複数の処理を実行する、
処理を更に前記コンピュータに実行させる、付記1または2に記載のキャッシュ管理プログラム。
[付記4]
前記第2のリクエストに応じた前記第2のレスポンスを生成するための複数の処理のうちの第1の処理の入力データと前記第1の処理の入力データと対応する処理の実行結果との対応関係が前記第2キャッシュに格納されている場合、前記第1の処理の実行結果を前記第2キャッシュから取得する、
処理を更に前記コンピュータに実行させる、付記3に記載のキャッシュ管理プログラム。
[付記5]
前記第2のリクエストに応じた前記第2のレスポンスを生成するための複数の処理のうちの第2の処理の入力データと前記第2の処理の入力データと対応する処理の実行結果との対応関係が前記第2キャッシュに格納されていても、前記第2の処理の入力データが第1の条件を満たす処理を指定している場合、前記第2の処理の実行結果を前記第2キャッシュから取得しない、
ことを特徴とする、付記3または4に記載のキャッシュ管理プログラム。
[付記6]
前記第2のリクエストは、数式処理に関するリクエストである、
付記3から5のいずれかに記載のキャッシュ管理プログラム。
[付記7]
前記第2キャッシュに格納する処理は、実行結果が第2の条件を満たす処理については当該処理の入力データと実行結果を前記第2キャッシュに格納しない、
ことを特徴とする、付記1から6のいずれかに記載のキャッシュ管理プログラム。
[付記8]
前記リクエストに応じた前記レスポンスを生成するための複数の処理は、複数のスレッドのうちのいずれか1つのスレッドが実行し、
前記1つのスレッドは、前記1つのスレッドに割り当てられた前記第2キャッシュに、前記複数の処理のそれぞれの処理の入力データと対応づけて前記処理の実行結果を格納する、
ことを特徴とする付記1から7のいずれかに記載のキャッシュ管理プログラム。
[付記9]
前記1つのスレッドは、前記複数のスレッドのうちの他のスレッドに割り当てられたキャッシュを参照しない、ことを特徴とする付記8に記載のキャッシュ管理プログラム。
[付記10]
前記リクエストと、前記リクエストに応じた前記レスポンスとの対応関係が前記第1キャッシュに格納されている場合、前記リクエストに応じた前記レスポンスを前記第1キャッシュから取得する、
処理を更に前記コンピュータに実行させる、付記1から9のいずれかに記載のキャッシュ管理プログラム。
[付記11]
前記リクエストに応じた前記レスポンスを生成するための複数の処理においてエラーが発生した場合、サーバに前記リクエストを送信し、
前記サーバから前記リクエストに応じた前記レスポンスを受信する、
処理を更に前記コンピュータに実行させる、付記1から10のいずれかに記載のキャッシュ管理プログラム。
[付記12]
前記リクエストを受信したことに応じて、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行し、かつ、サーバに前記リクエストを送信し、
前記サーバから前記リクエストに応じた前記レスポンスを受信する、
処理を更に前記コンピュータに実行させる、付記1から11のいずれかに記載のキャッシュ管理プログラム。
[付記13]
前記サーバから受信した前記レスポンスを前記第1キャッシュに格納する、
付記11または12に記載のキャッシュ管理プログラム。
[付記14]
前記サーバは、前記リクエストに応じた複数の処理の実行結果に基づき生成した前記レスポンスを第3キャッシュに格納する、
付記11から13のいずれかに記載のキャッシュ管理プログラム。
[付記15]
前記第3キャッシュには、他のコンピュータからの第3のリクエストに応じた複数の処理の実行結果から生成された第3のレスポンスが、前記第3のリクエストと対応づけて格納されており、
前記サーバは、前記コンピュータから前記リクエストを受信した場合に、前記リクエストと前記第3のリクエストとが合致すれば、前記リクエストに対する前記レスポンスとして、前記第3のレスポンスを前記コンピュータに通知する、
ことを特徴とする付記14に記載のキャッシュ管理プログラム。
[付記16]
前記リクエストは、数式処理に関するリクエストである、
付記1から15のいずれかに記載のキャッシュ管理プログラム。
[付記17]
付記1から16のいずれかに記載のキャッシュ管理プログラムを配布するサーバ。
[付記18]
リクエストと、前記リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行し、
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を第2キャッシュに格納し、
前記複数の処理の実行結果に基づき生成した前記レスポンスを、前記リクエストと対応づけて前記第1キャッシュに格納し、
前記リクエストに対して前記レスポンスを返す、
ことを含む、コンピュータが実行するキャッシュ管理方法。
[付記19]
リクエストと、前記リクエストに応じたレスポンスとの対応関係が第1キャッシュに格納されていない場合、前記リクエストに応じた前記レスポンスを生成するための複数の処理を実行する実行部と、
前記複数の処理の実行結果に基づき生成した前記レスポンスを、前記リクエストと対応づけて前記第1キャッシュに格納する第1格納部と、
前記複数の処理のそれぞれの処理の入力データと対応づけて、前記処理の実行結果を第2キャッシュに格納する第2格納部と、
前記リクエストに対して前記レスポンスを返す返信部と、
を含む、情報処理装置。
【符号の説明】
【0125】
100 キャッシュ管理システム
101 情報処理装置
102 サービス提供サーバ
105 ネットワーク
111 ブラウザ
112 第1キャッシュ
113 第2キャッシュ
131 第3キャッシュ
141 数式処理モジュール
201 制御部
202 記憶部
203 通信部
204 表示部
212 数式処理モジュール
213 処理モジュール
231 実行部
232 第1格納部
233 第2格納部
234 返信部
401 メインスレッド
402 子スレッド
1300 コンピュータ
1301 プロセッサ
1302 メモリ
1303 記憶装置
1304 読取装置
1305 着脱可能記憶媒体
1306 通信インタフェース
1307 入出力インタフェース
1308 バス
1311 入力装置
1312 表示装置
1330 サーバ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13