JP5672199B2 - 情報処理装置、情報処理方法及び情報処理プログラム - Google Patents

情報処理装置、情報処理方法及び情報処理プログラム Download PDF

Info

Publication number
JP5672199B2
JP5672199B2 JP2011190925A JP2011190925A JP5672199B2 JP 5672199 B2 JP5672199 B2 JP 5672199B2 JP 2011190925 A JP2011190925 A JP 2011190925A JP 2011190925 A JP2011190925 A JP 2011190925A JP 5672199 B2 JP5672199 B2 JP 5672199B2
Authority
JP
Japan
Prior art keywords
task
unit
thread
information processing
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011190925A
Other languages
English (en)
Other versions
JP2013054451A (ja
Inventor
圭 濱田
圭 濱田
宏一郎 雨宮
宏一郎 雨宮
康司 黒川
康司 黒川
弓子 緒方
弓子 緒方
英達 吉田
英達 吉田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011190925A priority Critical patent/JP5672199B2/ja
Priority to US13/591,889 priority patent/US8966484B2/en
Publication of JP2013054451A publication Critical patent/JP2013054451A/ja
Application granted granted Critical
Publication of JP5672199B2 publication Critical patent/JP5672199B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/484Precedence

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、情報処理装置において、マルチスレッド方式でプログラム処理を実行する技術に関する。
情報処理装置において、複数のスレッドでプログラム処理を行うマルチスレッド方式が広く用いられている。マルチスレッド方式を用いることによって並行処理が可能となるため、情報処理装置の処理性能の向上を図ることができる。そして、かかるマルチスレッド方式においてさらなる処理性能の向上を図った技術が提案されている。その一例として、スレッド及びキューの数を、メッセージの受信負荷状況により可変制御する技術がある。また、他の一例として、多重プロセッサシステムにおいて、タスク状態情報に、タスクを効果的に実行できる特定のプロセッサを表示し、当該タスクを優先的に選択できるようにした技術が提案されている。
特開平9−69053号公報 特開昭54−47545号公報
ところで、マルチスレッド方式においては、同時に起動したスレッド群は、OS(Operating System)のスケジューリングによって順次実行機会を与えられることとなる。このとき、スレッドの数が増加すると、OSのスケジューリングによるスレッド切り換えの処理コストが増加するという問題がある。また、スレッドの生成及び廃棄処理が多発すると、さらにオーバーヘッドが増加してしまうという問題もある。このような状態が発生すると、情報処理装置の処理性能は低下する。
そこで、本技術は、1つの側面において、マルチスレッド方式を適用した情報処理装置において、情報処理装置の処理性能を向上させることを目的とする。
本技術における1つの側面では、自スレッドに対応付けられたタスクキューに蓄積されたタスクをそれぞれ処理する複数のスレッドを所定数並列実行させる情報処理装置において、複数のスレッドのそれぞれが、次の処理を実行する。すなわち、複数のスレッドのそれぞれは、1つの処理要求に対する一連のプログラム処理が分割された複数のタスクのうちの1つのタスクを生成する。さらに、複数のスレッドのうちいずれか1つに対応付けられたタスクキューを選択し、該選択したタスクキューに、生成したタスクをエンキューする。また、自スレッドに対応付けられたタスクキューにエンキューされたタスクをデキューし、デキューしたタスクを実行する。
本技術における1つの側面によれば、マルチスレッド方式を適用した情報処理装置において、情報処理装置の処理性能を向上させることが可能となる。
情報処理装置においてプログラム処理を実行するスレッドを並列実行させた状態の一例を示す説明図である。 メッセージ中継装置を含んだ全体のシステム構成の一例の説明図である。 メッセージ中継装置の一例の機能ブロック図である。 タスク実行順定義の一例の説明図である。 タスクデータの一例の説明図である。 タスクキューテーブルの一例の説明図である。 コネクション情報の一例の説明図である。 メッセージに関連するデータの一例の説明図であり、(A)はメッセージ情報の一例の説明図、(B)はメッセージ本体の具体例の説明図である。 識別ルールの一例の説明図である。 転送ルールテーブルの一例の説明図である。 メッセージ中継装置のハードウェア構成の一例の説明図である。 各スレッドが実行する処理全体の流れの一例を示すフローチャートである。 コネクション受付処理の一例を示すフローチャートである。 タスク実行処理の一例を示すフローチャートである。 第2実施形態の処理の具体例を示す説明図である。 メッセージ中継装置の一例の機能ブロック図である。 紐付けタスク管理データの一例の説明図である。 タスクキュー、タスク管理データ及びタスクデータの関係の一例について示す説明図である。 各スレッドが実行する処理全体の流れの一例を示すフローチャートである。 タスク紐付け処理の一例を示すフローチャートである。 タスク実行処理の一例を示すフローチャートである。 タスク実行処理の一例を示すフローチャートである。 第2実施形態の処理の具体例を示す説明図である。 メッセージ中継装置の一例の機能ブロック図である。 紐付けタスク管理データの一例の説明図である。 各スレッドが実行する処理全体の流れの一例を示すフローチャートである。
[1.実施形態の概要]
本明細書で示す実施形態で説明する技術は、マルチスレッド方式を適用した情報処理装置において、プログラム処理を行う際の処理効率を向上させるものである。
通常、情報処理装置においてマルチスレッド方式でプログラム処理を行う場合、OS(Operating System)は、スケジューリングを行い、同時に起動されている各スレッドを順次実行する。かかるマルチスレッド方式では、スレッドの数が増加すると、OSのスケジューリングによるスレッド切り換え(コンテキストスイッチ)の処理コストが増加するという問題がある。また、スレッドの生成及び廃棄処理が多発すると、さらにオーバーヘッドが増加してしまうという問題もある。
そこで、本明細書で示す実施形態では、情報処理装置において、プログラム処理を実行する複数のスレッドを所定数並列実行(常駐)させておく。ここでいう所定数のスレッドの並列実行とは、少なくとも、スレッド切り替えをせずに、複数のプロセッサによってそれぞれスレッドを同時に実行することを含む。ここで、本明細書で示す実施形態では、プログラム処理を複数のタスクに分割する。そして、分割したタスクを、それぞれ、並列実行されているスレッドのうちの1つに対応付けられたタスクキューにエンキューし、逐次
実行する。
図1は、情報処理装置においてプログラム処理を実行するスレッドを並列実行させた状態の一例を示す説明図である。この例では、CPU(Central Processing Unit)で動作しているOS上で、プログラム処理を実行する複数のスレッドが並列実行されている。また、処理A、処理B及び処理Cの3つのプログラム処理が、それぞれ複数のタスクに分割されている。各スレッドには、それぞれ、処理A、処理B及び処理Cのプログラム処理が分割されたタスクのうち、いずれかのタスクがタスクキューにエンキューされて割当てられる。そして、各スレッドは、自身に割当てられたタスクを順次デキューして実行していく。なお、図1に示す例では、情報処理装置がCPUコアを複数有する構成であり、スレッドの数がCPUコアの数と一致しているが、本技術はかかる構成に限って適用されるものではない。
このように、本明細書で示す実施形態で説明する技術では、プログラム処理を実行するスレッドが所定数並列実行されているため、スレッドの切り替えの発生や、スレッドの生成・廃棄のオーバーヘッドを抑制させることが可能である。また、このとき、一連のプログラム処理を複数のタスクに分割して複数のスレッドのいずれかに振り分けてエンキューし、各スレッドが、それぞれ、エンキューされたタスクをデキューして実行する。このため、並列実行されているスレッドの一部に処理負荷が偏ることを防ぐことができ、プログラム処理によって遅延時間(処理待ち時間)に差が生じることを抑制することができる。したがって、一部のプログラム処理において著しい処理遅延が生じることを回避することができる。このように、本技術によれば、情報処理装置において、スレッドの切り替えの発生や、スレッドの生成・廃棄のオーバーヘッドを抑制しつつ、プログラム処理を行う際の処理効率を向上させることが可能となる。
[2.第1実施形態]
第1実施形態では、前述の概要で説明した技術を、メッセージ中継装置に適用した例を用いて説明する。
<2.1 全体システム構成>
図2は、第1実施形態に係るメッセージ中継装置を含んだ全体のシステム構成を示す。本システムでは、メッセージ中継装置1が、クライアント2及びサーバ3と通信可能にネットワーク接続されている。このネットワークは、例えばLAN(Local Area Network)やWAN(Wide Area Network)等であり、本実施形態では、少なくともTCP(Transmission Control Protocol)プロトコルを用いた通信を実現する。
メッセージ中継装置1、クライアント2及びサーバ3間のデータ通信のシーケンスは、次のとおりである。
(1)クライアント2は、サーバ3で所定の処理を実行するためのリクエストメッセージを、メッセージ中継装置1に対して送信する。
(2)メッセージ中継装置1は、クライアント2から受信したメッセージに含まれる情報から、当該メッセージの転送先のサーバ3を特定し、特定したサーバ3に対してリクエストメッセージを転送する。
(3)サーバ3は、メッセージ中継装置1からリクエストメッセージを受信すると、所定の処理を実行する。そして、サーバ3は、クライアント2宛てのレスポンスメッセージを、メッセージ中継装置1に対して送信する。
(4)メッセージ中継装置1は、サーバ3から受信したレスポンスメッセージを、リクエストメッセージの送信元のクライアント2に転送する。
<2.2 メッセージ中継装置の機能構成>
図3は、メッセージ中継装置1の一例の機能ブロック図である。メッセージ中継装置1は、CPUによって実行されプログラム処理を行うスレッド11(スレッド#1)及びスレッド12(スレッド#2)を有している。スレッド11は、コネクション受付部11A、タスク生成部11B、エンキュー部11C、デキュー部11D、タスク実行部11Eを備える。また、図示を省略しているが、スレッド12もスレッド11と同様の構成要素を備えている。なお、本実施形態ではスレッドの数を2つとして説明するが、スレッドの数はいくつであってもよい。また、メッセージ中継装置1が備える記憶手段には、タスク実行順定義21、タスクキューテーブル22、コネクション情報23、メッセージ情報24、識別ルール25及び転送ルールテーブル26が格納される。なお、本明細書において記憶手段とは、メモリ等の揮発性記憶装置及びストレージ等の不揮発性記憶装置のいずれか一方又は両方を示す。
まず、スレッド11(スレッド12も同様)が備える各機能について説明する。
コネクション受付部11Aは、メッセージの通信におけるコネクションの受付処理を行う。
タスク生成部11Bは、1つの処理要求に対する一連のプログラム処理が分割された複数のタスクのうちの1つのタスクを生成する。本実施形態のメッセージ中継装置1では、1つの処理要求に対する一連のプログラム処理とは、すなわち、クライアント2から1つのリクエストメッセージを受信したときにおける、クライアント2及びサーバ3間におけるメッセージの中継処理のことである。タスク生成部11Bは、コネクション受付部11Aがコネクションの受付処理を行ったとき、又は、タスク実行部11Eが1つのタスクの実行を終了したとき、タスク実行順定義21に従って、メッセージ中継処理における次のタスクを生成し、生成したタスクをエンキュー部11Cに渡す。
エンキュー部11Cは、タスク生成部11Bが生成したタスクを、スレッド11のタスクキュー31又はスレッド12のタスクキュー32のいずれかにエンキューする。このとき、エンキュー部11Cは、メッセージ中継装置1が実行する全てのスレッドのタスクキューのキュー長を調査し、最もキュー長の短いタスクキューを選択する。そして、選択したタスクキューに、タスクをエンキューする。
デキュー部11Dは、スレッド11に対応付けられたタスクキュー31にエンキューされたタスクをデキューし、デキューしたタスクをタスク実行部11Eに渡す。
タスク実行部11Eは、デキューしたタスクを実行し、受信メッセージのメッセージ情報24及び後述するシーケンス番号をタスク生成部11Bに渡す。
次に、記憶手段に格納される各種データについて説明する。
タスク実行順定義21は、プログラム処理に含まれるタスクが、実行順のシーケンス番号とともに定義されたデータである。図4に示すタスク実行順定義の一例は、メッセージ中継処理に含まれるタスクの実行順を示している。本実施形態における各タスクの具体的内容については後述する。
タスクキュー31は、スレッド11においてタスクを実行するために必要な情報が含まれたタスクデータが蓄積されるキューである。図5に示すタスクデータの一例は、メッセージ中継処理に含まれるタスクを実行するために必要な情報が含まれたタスクデータを示している。当該タスクデータは、タスクの処理を実行する関数を示す関数ポインタ、処理対象(引数)であるメッセージ情報24がメモリ上に格納されているアドレスを示すポインタを含む。そして、このタスクデータは、さらに、タスク実行順定義のうち、現在実行しているタスクを表すシーケンス番号(換言すれば、当該タスクが何番目のタスクであり、次に実行するべきタスクが何番目のタスクであるかを特定する番号)を含む。スレッド
12に対応するタスクキュー32にも、同様のタスクデータが蓄積される。
タスクキューテーブル22は、メッセージ中継装置1が実行している全てのスレッドに対応付けられたタスクキューの状態を管理するテーブルである。図6に示すタスクキューテーブル22の一例は、キュー番号、担当スレッド、readインデックス、writeインデックス、最大要素数及びキューの先頭アドレスのカラムを有する。キュー番号は、タスクキューを一意に特定する番号である。担当スレッドは、タスクキューに蓄積されたデータを処理するスレッドを示す。readインデックス及びwriteインデックスは、タスクキューにおける現在の読出位置のインデックス及び書込位置のインデックスを示す。最大要素数は、タスクキューに蓄積可能な処理要素数を示す。タスクキューの先頭アドレスは、メッセージ中継装置1の記憶手段上における各タスクキューの先頭アドレスを示す。
コネクション情報23は、コネクション受付部11Aがコネクションを確立したときに生成する、コネクションを特定する情報である。図7に示すコネクション情報23の一例は、メッセージ受信時におけるソケットを識別する識別子、送信元IPアドレス、送信元ポート、宛先IPアドレス及び宛先ポートを含む。
メッセージ情報24は、コネクション受付部11Aがコネクションを確立したときに生成する、メッセージ中継処理に必要な情報やメッセージ本体等に関連する情報である。図8(A)に示すメッセージ情報24の一例は、メッセージのデータサイズ、受信コネクション情報のポインタ、送信コネクション情報のポインタ、メッセージデータ本体の先頭アドレス、ソケットを識別する識別子及びメッセージの宛先のIPアドレス及びポートを含む。なお、図8(B)には、メッセージデータ本体の具体例を示している。この具体例では、メッセージデータは、レイヤ7プロトコルヘッダ(例えば、HTTP(HyperText Transfer Protocol)ヘッダ)と、メッセージコンテンツ(例えば、SOAP(Simple Object Access Protocol)エンベロープ)を含んでいる。
識別ルール25は、メッセージデータ本体のメッセージコンテンツの内容のうち、識別子が記載されている箇所を特定するためのデータである。図9に示すメッセージ情報24の一例は、識別子抽出箇所及び抽出箇所の書式を含む。なお、図9の識別ルール25のデータ例は、図8(B)に示したメッセージデータの例に対応している。すなわち、この識別ルール25は、メッセージコンテンツのうち、XML(EXtensible Markup Language)タグの<Presentity>に、Xpath形式で識別子が記載されていることを示しており、図8(B)のメッセージコンテンツにおいては、識別子は「sip:bob@example.com」である。
転送ルールテーブル26は、メッセージデータの転送先となるサーバ3を特定する情報を有するテーブルである。図10に示す転送ルールテーブル26の一例は、識別子、及び、当該識別子で特定されるソケットで通信されるメッセージデータの転送先の宛先サーバのIPアドレスを含む。例えば、識別子が「sip:bob@example.com」である場合、宛先サーバのIPアドレスは、「10.10.10.11:8080」である。
<2.3 メッセージ中継装置のハードウェア構成>
図11は、メッセージ中継装置1が具現化された情報処理装置のハードウェア構成の一例を示す。本情報処理装置は、プロセッサ901、メモリ902、ストレージ903、可搬記憶媒体駆動装置904、入出力装置905及び通信インタフェース906を備える。
プロセッサ901は、制御ユニット、演算ユニット及び命令デコーダ等を含み、実行ユニットが、命令デコーダで解読されたプログラムの命令に従い、制御ユニットより出力される制御信号に応じ、演算ユニットを用いて算術・論理演算を実行する。かかるプロセッサ901は、制御に用いる各種情報が格納される制御レジスタ、既にアクセスしたメモリ
2等の内容を一時的に格納可能なキャッシュ、及び、仮想記憶のページテーブルのキャッシュとしての機能を果たすTLBを備える。なお、プロセッサ901は、CPU(Central Processing Unit)コアが複数設けられている構成でもよい。
メモリ902は、例えばRAM(Random Access Memory)等の記憶装置であり、プロセッサ901で実行されるプログラムがロードされるとともに、プロセッサ901の処理に用いるデータが格納されるメインメモリである。また、ストレージ903は、例えばHDD(Hard Disk Drive)やフラッシュメモリ等の記憶装置であり、プログラムや各種データが格納される。可搬記憶媒体駆動装置904は、可搬記憶媒体907に記憶されたデータやプログラムを読み出す装置である。可搬記憶媒体907は、例えば磁気ディスク、光ディスク、光磁気ディスク又はフラッシュメモリ等である。なお、プロセッサ901は、メモリ902やストレージ903と協働しつつ、ストレージ903や可搬記憶媒体907に格納されたプログラムを実行する。なお、プロセッサ901が実行するプログラムや、アクセス対象となるデータは、当該情報処理装置と通信可能な他の装置に格納されていてもよい。前述したメッセージ中継装置1の記憶手段は、メモリ902、ストレージ903及び可搬記憶媒体907の少なくともいずれか1つである。
入出力装置905は例えばキーボード等やディスプレイ等であり、ユーザ操作等による動作命令を受け付ける一方、情報処理装置による処理結果を出力する。通信インタフェース906は例えばLAN(Local Area Network)カード等であり、外部とのデータ通信を可能にする。前述した情報処理装置の各構成要素は、バス908で接続されている。
なお、上述した各実施形態において、記憶装置に格納されたデータは、当該情報処理装置とは異なる他の装置に含まれる記憶装置に含まれていてもよい。この場合、当該情報処理装置と当該他の装置とが通信可能にネットワーク接続され、当該情報処理装置は、ネットワークを介して当該他の装置の記憶装置にアクセスすることとなる。
<2.4 タスク実行順定義の具体例>
ここで、図4に示した、メッセージ中継処理におけるタスク実行順定義の一例につき、各タスクの具体的内容について説明する。
(タスク1)リクエスト受信
リクエスト受信タスクは、メッセージ情報24の受信コネクション情報に基づき、当該コネクションによって、クライアント2からリクエストメッセージを受信する。そして、受信したデータの先頭アドレスおよびデータサイズをメッセージ情報24に設定する。
(タスク2)識別子抽出
識別子抽出タスクは、識別ルール25を参照し、メッセージデータ本体から識別子を抽出するタスクである。このとき、識別子抽出タスクは、抽出した識別子をメッセージ情報24に設定する。
(タスク3)宛先決定
宛先決定タスクは、メッセージ情報24の識別子をキーとして転送ルールテーブル26を検索し、メッセージの宛先となるサーバ3を決定する。このとき、宛先決定タスクは、決定したサーバ3のIPアドレス及びポートを、メッセージ情報24の宛先IPアドレス及びポートに設定する。
(タスク4)リクエスト送信
リクエスト送信タスクは、メッセージ情報24の宛先IPアドレス及びポートに基づいて、サーバ3との間にコネクションを確立する。このとき、リクエスト送信タスクは、送信コネクション情報を生成し、メッセージ情報24に設定する。そして、リクエスト送信タスクは、送信コネクションを用いて、リクエストメッセージをサーバ3に送信する。
(タスク5)レスポンス受信
レスポンス受信タスクは、メッセージ情報24の送信コネクション情報に基づき、当該コネクションによって、サーバ3からレスポンスメッセージを受信する。なお、この段階では、メッセージ情報24のうち受信コネクション情報以外は一旦解放済みであるため、レスポンス受信タスクは、受信したデータの先頭アドレスおよびデータサイズをメッセージ情報24に設定する。
(タスク6)レスポンス送信
レスポンス送信タスクは、メッセージ情報24の受信コネクション情報に基づき、当該コネクションを用いて、サーバ3から受信したレスポンスメッセージをクライアント2に送信する。
<2.5 メッセージ中継装置で実行される処理>
次に、本実施形態に係るメッセージ中継装置において実行される処理について説明する。
図12は、各スレッドが実行する処理全体の流れの一例を示すフローチャートである。S1及びS2は、所定時間ごとに繰り返し実行される(ループA)。
S1では、コネクション受付部11A、タスク生成部11B及びエンキュー部11Cが、コネクション受付処理を実行する。
さらに、S2は、所定回数分だけ繰り返し実行される(ループB)。
S2では、デキュー部11D、タスク実行部11E、タスク生成部11B及びエンキュー部11Cが、タスク実行処理を実行する。
図13は、コネクション受付部11A、タスク生成部11B及びエンキュー部11Cが実行する、コネクション受付処理を示す。
S11では、コネクション受付部11Aが、TCPコネクションの受付けを行う。
S12では、コネクション受付部11Aは、TCPコネクションの受付けに成功したか否かを判定する。成功したときには(Yes)、S13に進む。このとき、コネクション受付部11Aは、コネクション情報23及びメッセージ情報24を生成し、メッセージ情報24をタスク生成部11Bに渡す。一方、成功しなかったときには、処理を終了する。
S13では、タスク生成部11Bが、コネクション受付部11Aからメッセージ情報24を受信すると、タスク実行順定義21を参照して、先頭のタスク(シーケンス番号が1のタスク)を生成する。そして、生成したタスクをエンキュー部11Cに送信する。具体的には、タスク生成部11Bは、タスクデータを生成し、生成したタスクデータをエンキュー部11Cに渡す。
S14では、エンキュー部11Cが、タスクキューテーブル22を参照し、すべてのスレッドに対応する各タスクキューのキュー長を調査する。そして、エンキュー部11Cは、最もキュー長の短いタスクキューを選択し、選択したタスクキューに対して、タスク生成部11Bが生成したタスクのエンキューを行う。
なお、例えば、各タスクキューの状態が図6に示したタスクキューテーブル22のデータ例のようになっている場合、このエンキュー処理は次のようになる。すなわち、エンキュー部11Cは、最大1000個のタスクをエンキュー可能なタスクキュー31(#1)、タスクキュー32(#2)について、readインデックスおよびwriteインデックスの差分を調査する。すると、タスクキュー31は差が0であるためキュー長0となり、タスクキュー32は差が252であるためキュー長252となる。したがって、エンキュー部11Cは、タスクキュー31にタスクをエンキューすることになる。ここで、エンキュー部
11Cは、タスクキュー31の先頭アドレスよりwriteインデックス分先のアドレスにタスクデータを格納し、writeインデックスを1つ増やす。なお、writeインデックスを1つ増やした結果、writeインデックスが最大要素数1000と等しくなった場合、エンキュー部11Cは、writeインデックスを0にする。
図14は、デキュー部11D、タスク実行部11E、タスク生成部11B及びエンキュー部11Cが実行する、タスク実行処理を示す。
S21では、デキュー部11Dが、タスクキュー31に蓄積されたタスクのデキューを行う。具体的には、デキュー部11Dは、タスクキューテーブル22を参照し、自スレッドに対応付けられたタスクキュー31のキュー長を調査する。このとき、タスクキューのキュー長が0より大きい場合、デキューが成功する一方、キュー長が0の場合、デキュー失敗となる。ここで、デキュー部11Dは、キュー先頭アドレスからreadインデックス分先のタスクデータに係るタスクのデキューを行う。また、デキュー部11Dは、デキューに成功すると、取得したタスクデータが登録されていた領域をクリアし、タスクキューテーブル22のreadインデックスを1つ増やす一方で、タスク実行部11Eにタスクを送信する。なお、デキュー部11Dは、readインデックスを1つ増やした結果、最大要素数と等しくなった場合、readインデックスを0にする。
S22では、デキュー部11Dは、S21のデキューが成功したか否かを判定する。成功した場合(Yes)、S23に進む一方、失敗した場合(No)、デキュー失敗として処理を終了する。この場合、処理の終了とは、図12で示した全体処理におけるループBを抜けることを意味する。
S23では、タスク実行部11Eが、デキュー部11Dによりデキューされたタスクの実行を行う。すなわち、タスク実行部11Eは、タスクデータに含まれる、メッセージ情報24のポインタを引数として、関数ポインタで特定された関数を実行する。例えば、デキューされたタスクが、図5に示したタスクデータに係るタスクである場合、タスク実行部11Eは、メッセージ情報24のポインタを引数として、リクエスト受信関数の関数ポインタを実行することになる。そして、タスク実行部11Eは、タスクの実行が終わると、タスクデータのシーケンス番号を1つ増やし、当該シーケンス番号とメッセージ情報24をタスク生成部11Bに渡す。
S24では、タスク生成部11Bが、タスク実行部11Eより渡されたシーケンス番号に基づき、該当するシーケンス番号の処理のタスクを生成する。タスク生成部11Bは、生成したタスクをエンキュー部11Cに渡す。
S25では、エンキュー部11Cが、タスクキューテーブル22を参照し、すべてのスレッドに対応する各タスクキューのキュー長を調査する。そして、最もキュー長の短いタスクキューを選択し、選択したタスクキューに対して、タスク生成部11Bが生成したタスクのエンキューを行う。
<2.6 第1実施形態による効果、変形例等>
かかる第1実施形態によれば、スレッドが所定数並列実行されているため、スレッドの切り替えや、スレッドの生成・廃棄のオーバーヘッドを低減させることが可能である。また、1つのプログラム処理を、タスク実行順定義に基づき複数のタスクに分割して各スレッドのタスクキューにエンキューし、各スレッドがそれぞれエンキューされたタスクをデキューして実行する。このため、並列実行されているスレッドの一部に処理負荷が偏ることを防ぐことができ、プログラム処理によって遅延時間に差が生じることを抑制することができる。したがって、一部のプログラム処理において特に大きな処理遅延が生じること
を回避することができる。このように、第1実施形態で説明する技術によれば、スレッドの切り替えの発生や、スレッドの生成・廃棄のオーバーヘッドを抑制しつつ、プログラム処理を行う際の処理効率を向上させることが可能となる。
また、エンキュー先のタスクキューを、最もキュー長が短いキューにすることにより、各スレッドの処理負荷がさらに調整され、より効率的にCPUを利用することが可能となっている。
ここで、スレッド数は、メッセージ中継装置1が備えるCPUコアの数に一致していてもよい。そうすることにより、CPUにおいてスレッドを切り替える処理コストをさらに削減することができる。
なお、このメッセージ中継装置1におけるコネクション受付処理は、全てのスレッドにおいて実行するのではなく、例えば、一部の特定のスレッドのみが実行してもよい。
[3.第2実施形態]
<3.1 第2実施形態の概要>
第2実施形態のメッセージ中継装置では、第1実施形態のメッセージ中継装置における処理に加え、さらに、同一機能のタスクの紐付けを行い、同一機能のタスクを連続実行するようにする。一般に、同一機能のタスクは同一のデータを参照することが多い(メッセージ中継処理のタスクの具体例で説明すると、例えば、宛先決定タスクは、いずれのスレッドで実行されるときにも、同一の転送ルールテーブルを参照する)。このように、同一機能のタスクを連続実行することにより、CPUにおけるキャッシュのヒット率が向上する。このため、さらなる処理効率の向上を図ることができる。なお、第2実施形態の説明においては、第1実施形態と同じ部分について説明を適宜省略する。
ここで、第2実施形態で実現する処理の具体例について、図15を参照しながら説明する。
例えば、スレッド#1及びスレッド#2のタスクキューが、それぞれ図15に示す状態であるとする。具体的には、スレッド1のタスクキューには、タスクA#1、B#1、C#1、A#2のタスクデータが存在している。また、スレッド2のタスクキューには、タスクD#1、C#2、A#3、B#2のタスクデータが存在している。なお、タスクA、B、C、Dは、それぞれ同一機能のタスクのグループ(具体的には、タスク実行順定義における各タスク(例えば、図4の例におけるリクエスト受信、識別子抽出等))を表しているものとする。このとき、第2実施形態では、同一機能のタスク同士を紐付けする。例えば、タスクAに着目すると、タスクA#1、A#2、A#3を紐付けする。このとき、例えば、紐付け順として、タスクA#1、A#2、A#3の順に紐付けがなされたものとする。
この場合、第2実施形態では、スレッド#1は、まずタスクA#1を実行した後、次にタスクキューに蓄積されているタスクB#1ではなく、タスクA#1に紐付けされたタスクA#2を実行する。さらに、スレッド#1は、タスクA#2を実行すると、さらにタスクA#2に紐付けされた、スレッド#2のタスクキューのタスクA#3を実行する。このように、第2実施形態では、タスクに紐付けがなされているときには、同一機能のタスクを連続実行する。なお、一方で、紐付けがなされていないときには、通常通り、タスクキューに蓄積されたタスクを順次実行することとなる。例えば、図15の例において、スレッド#2は、タスクD#1から順次タスクを実行していく。このとき、例えばすでにタスクA#3がスレッド#1により実行済みであった場合には、スレッド#2は、タスクC#2の次に、タスクB#2を実行することとなる。
<3.2 メッセージ中継装置の機能構成>
図16は、第2実施形態に係るメッセージ中継装置の一例の機能ブロック図である。第2実施形態に係るメッセージ中継装置は、第1実施形態に係るメッセージ中継装置に加え、スレッドが、タスク紐付け部11F及び紐付けタスク実行部11Gを備える。さらに、第2実施形態に係るメッセージ中継装置1は、記憶手段において、紐付けタスク管理データ27を備える。また、タスクキューにおいては、タスクデータをラッピングするタスク管理データを備える。
タスク紐付け部11Fは、同一機能のタスクの紐付けを行う。
紐付けタスク実行部11Gは、紐付けられたタスクを辿りながら、同一機能のタスクの連続実行を行う。
紐付けタスク管理データ27は、同一機能のタスクごとに、タスクキューに蓄積されたタスクをどこまで紐付けしたかを管理するためのデータである。図17に示す紐付けタスク管理データの一例は、同一機能である紐付け対象のタスク(すなわち、タスク実行順定義で定義されたタスクごと)の関数、紐付け済みの最終タスク及び調査済タスクのタスクキュー内最終位置を含む。紐付け済みの最終タスクは、当該タスクのメモリ上のアドレスと、どのスレッドのタスクキューに属しているかを示す情報を含む。また、調査済タスクとは、紐付けできるか否かの調査が済んでいるタスクのことである。調査済タスクのタスクキュー内最終位置は、タスクキューごとにそれぞれ保持される。
図18は、タスクキュー、タスク管理データ及びタスクデータの関係について示す説明図である。タスクキューには、タスク管理データによってラッピングされたタスクデータが蓄積されている。より具体的に説明すると、タスクキューには、タスク管理データへのポインタが蓄積されている。タスク管理データは、タスクを実行してよいか否かを示す実行フラグ、タスクデータへのポインタ、紐付け先ポインタ及び紐付け元ポインタを含んでいる。紐付け先ポインタとは、自タスクの次に実行するタスクのタスク管理データへのポインタであり、紐付け元ポインタとは、自タスクの前に実行するタスクのタスク管理データへのポインタである。タスクデータ自体の構造は、図5に示した構造と同じであるため、説明を省略する。
<3.3 メッセージ中継装置で実行される処理>
次に、本実施形態に係るメッセージ中継装置1において実行される処理について説明する。
図19は、各スレッドが実行する処理全体の流れの一例を示すフローチャートである。S31、S32及びS33は、所定時間ごとに繰り返し実行される(ループC)。
S31では、コネクション受付部11A、タスク生成部11B及びエンキュー部11Cが、コネクション受付処理を実行する。
さらに、S32は、所定回数分だけ繰り返し実行される(ループD)。
S32では、デキュー部11D、タスク実行部11E、タスク生成部11B、エンキュー部11C及び紐付けタスク実行部11Gが、タスク実行処理を実行する。
S33では、タスク紐付け部11Fが、タスク紐付け処理を実行する。
図20は、タスク紐付け部11Fが実行する、タスク紐付け処理を示す。
S41では、タスク紐付け部11Fは、紐付けタスク管理データ27より、紐付け対象のタスクの関数、紐付け済みの最終タスク及び調査済みタスクのタスクキュー内最終位置を読み出す。
S42〜S45は、各タスクキューにつきそれぞれ実行され(ループE)、かつ、各タスクキューの未調査のタスク数だけ繰り返し実行される(ループF)。
S42では、タスク紐付け部11Fは、現在調査中のタスクキューの、調査済みタスクのキュー内最終位置の次にあるタスク管理データを取得する。
S43では、タスク紐付け部11Fは、取得したタスク管理データからタスクデータを取得する。
S44では、タスク紐付け部11Fは、紐付けタスク管理データ27の紐付け対象タスクの関数のアドレスと、取得したタスクデータに含まれる関数ポインタのアドレスとを比較する。両者が一致する場合には(Yes)、S45に進み、一致しない場合には(No)、S46へ進む。
S45では、タスク紐付け部11Fは、取得したタスク管理データと、紐付け済みの最終タスクのタスク管理データとの紐付けを行う。具体的には、タスク紐付け部11Fは、紐付けタスク管理データ27の紐付け済みの最終タスクのタスク管理データの紐付け先ポインタに、タスク管理データのアドレスを設定する一方、取得したタスク管理データの紐付け元ポインタに、紐付けタスク管理データ27の紐付け済みの最終タスクのタスク管理データのアドレスを設定する。こうすることで、双方向リンクを作成することができる。ここで、タスク紐付け部11Fは、タスクの紐付けが完了すると、紐付けタスク管理データ27の紐付け済みの最終タスクに、取得したタスク管理データのタスクがエンキューされているタスクキュー及びその設定アドレスを設定する。
S45では、タスク紐付け部11Fは、紐付けタスク管理データ27の調査済みタスクを、S42で取得したタスク管理データのインデックスで更新する。
コネクション受付処理については、第1実施形態と同様であるため、説明を省略する。
図21及び図22は、デキュー部11D、タスク実行部11E、タスク生成部11B、エンキュー部11C及び紐付けタスク実行部11Gが実行する、タスク実行処理を示す。
S51では、デキュー部11Dが、タスクキュー31に蓄積されたタスク管理データを取得する。具体的には、デキュー部11Dは、タスクキューテーブル22を参照し、自スレッドが担当するタスクキュー31のキュー長を調査する。このとき、タスクキューのキュー長が0より大きく、かつ、取得したタスク管理データの実行フラグがOFFであるときに、タスク管理データの取得が成功するものとする。一方、タスクキューのキュー長が0であるときには、タスク管理データの取得は失敗である。なお、タスクキューのキュー長が0より大きいとしても、実行フラグがONであるときには、デキュー部11Dは、当該タスク管理データをスキップし、次のインデックスのタスク管理データの調査を行う。
S52では、デキュー部11Dは、S51のタスク管理データの取得が成功したか否かを判定する。成功した場合(Yes)、S53に進む一方、失敗した場合(No)、処理を終了する。この場合、処理の終了とは、図19で示した全体処理におけるループDを抜けることを意味する。
S53では、デキュー部11Dは、取得したタスク管理データの実行フラグをONに変更する。
S54では、デキュー部11Dは、取得したタスク管理データの紐付け元ポインタを調査する。
S55では、デキュー部11Dは、紐付け元ポインタにアドレスが登録されているか否かを判定する。アドレスが登録されている場合には(Yes)、S56に進み、アドレスが登録されていない場合は(No)、S57に進む。
S56では、デキュー部11Dは、紐付け元ポインタが指すアドレスのタスク管理データの紐付け先ポインタをクリアする。
S57では、デキュー部11Dは、取得したタスク管理データの紐付け先ポインタを調査する。
S58では、デキュー部11Dは、紐付け先ポインタにアドレスが登録されているか否かを判定する。アドレスが登録されている場合は(Yes)、S59に進み、アドレスが登録されていない場合は(No)、S60に進む。
S59では、デキュー部11Dは、取得したタスク管理データの紐付け先ポインタが指すアドレスのタスク管理データの紐付け元ポインタをクリアする。
S60では、デキュー部11Dは、取得したタスク管理データのタスクデータに係るタスクのデキューを行う。デキュー部11Dは、デキューに成功すると、取得したタスク管理データが登録されていた領域をクリアし、readインデックスを増やす一方で、タスク実行部11Eにタスクを送信する。なお、デキュー部11Dは、readインデックスを増やした結果、最大要素数と等しくなった場合、readインデックスを0にする。
S61では、タスク実行部11Eが、デキュー部11Dによりデキューされたタスクの実行を行う。すなわち、タスク実行部11Eは、タスクデータに含まれる、メッセージ情報24のポインタを引数として、関数ポインタで特定された関数を実行する。そして、タスク実行部11Eは、タスクの実行が終わると、タスクデータのシーケンス番号を1つ増やし、当該シーケンス番号及びメッセージ情報24、並びに、当該タスクデータに対応するタスク管理データをタスク生成部11Bに渡す。
S62では、タスク生成部11Bが、タスク実行部11Eより渡されたシーケンス番号に基づいてタスクを生成する。具体的には、タスク生成部11Bは、該当するシーケンス番号のタスクの処理を行う関数のアドレスを設定したタスクデータを生成するとともに、当該タスクデータに対応するタスク管理データを生成する。タスク生成部11Bは、生成したタスク管理データ、及び、タスク実行部11Eから渡されたタスク管理データをエンキュー部11Cに渡す。
S63では、エンキュー部11Cが、タスクキューテーブル22を参照し、すべてのタスクキューのキュー長を調査する。そして、最もキュー長の短いタスクキューを選択し、選択したタスクキューに対して、タスク生成部11Bが生成したタスクのエンキューを行う。
S64では、エンキュー部11Cは、タスク実行部11Eから渡されたタスク管理データを調査し、実行したタスクが登録されているタスク管理データに紐付け先ポインタが登録されているか否かを判定する。紐付け先ポインタが登録されている場合(Yes)、エンキュー部11Cは、紐付けタスク実行部11Gに、紐付け先ポインタが指すタスク管理データを渡し、S65へ進む。一方、紐付け先ポインタが登録されていない場合(No)、処理を終了する(すなわち、ループDによってS51へ戻り、次のキュー順のタスク管理データの処理が行われる)。
S65では、紐付けタスク実行部11Gが、エンキュー部11Cから渡されたタスク管理データの実行フラグを調査する。
S66では、紐付けタスク実行部11Gは、実行フラグがOFFであるか否かを判定する。実行フラグがOFFである場合(Yes)、紐付けタスク実行部11Gは、エンキュー部11Cから取得したタスク管理データにつき、S53〜S66の処理を行う。一方、
実行フラグがONである場合(No)、処理を終了する(すなわち、ループDによってS51へ戻り、次のキュー順のタスク管理データの処理が行われる)。
<3.4 第2実施形態による効果、変形例等>
かかる第2実施形態によれば、第1実施形態に加え、同一機能のタスクの紐付け処理を行って連続実行することにより、同一のデータを参照する処理が連続実行される。このため、CPUにおけるキャッシュのヒット率が向上し、さらなる処理効率の向上を図ることができる。
なお、例えば、同一機能のタスクを連続実行する方法として、同一機能のタスクを一つのタスクキューにのみエンキューし、連続実行するという方法が考えられる。しかし、かかる方法では、各スレッドの処理量のバランスが崩れ、結果的にCPUを効率的に使えなくなってしまうという問題がある。
これに対し、第2実施形態では、各スレッドに対応するキュー長が均等になるようにエンキューを行い、紐付けられたタスクの連続実行を分散的に行う。このため、各スレッドの処理量のバランスが崩れないというメリットがある。
例えば、図23に示すように、スレッド#1〜スレッド#3の3つのスレッドが実行されている場合を想定する。そして、図23に示す第1段階として、スレッド1のタスクキューには、タスクA#1、B#1、C#1、A#2のタスクデータが存在しているとする。また、スレッド2のタスクキューに、タスクA#3、C#2、A#4、B#2のタスクデータが存在しているとする。さらに、スレッド3のタスクキューには、C#3、D#2、A#5、B#3のタスクデータが存在しているとする。このとき、タスクA#1、A#2、A#3、A#4、A#5が紐付けされることとなるが、スレッド2は、タスクA#3がキューの実行順になったときに、紐付けに関係なく、タスクA#3を実行する。このように、A#3が実行済みとなった場合、図23で第2段階に示すように、タスクA#2からA#3への紐付けが無効となる。一方で、スレッド2は、タスクA#3を実行した後、続けてスレッド3のタスクキューのタスクA#4を実行することになる。すなわち、各スレッドは、タスクの実行順がきたときには、そのタスクが他のタスクから紐付けられているか否かに関わらず実行する。このため、かりに紐付けられたタスクが多数となったとしても、特定のスレッドの処理量が著しく偏って増加するということはない。また、このように、スレッドがタスクキューの実行順に従ってタスクを実行した結果、一部の紐付けが無効になったとしても、当該実行したタスクの後にさらに他のタスクが紐付けられている場合には、そのタスクを実行したスレッドは、その紐付けをさらに辿ってタスクを連続実行していくこととなる。このため、このような第2実施形態によれば、特定のスレッドの処理量が著しく偏って増加することを防ぎつつも、同一機能のタスクの連続実行を確実に実現することができる。
[4.第3実施形態]
<4.1 第3実施形態の概要>
第3実施形態のメッセージ中継装置では、第2実施形態のメッセージ中継装置における同一機能のタスクの紐付け処理を、各タスクのエンキュー時に行う。なお、第3実施形態の説明においては、第1実施形態や第2実施形態と同じ部分について説明を適宜省略する。
<4.2 メッセージ中継装置の機能構成>
図24は、第3実施形態に係るメッセージ中継装置の一例の機能ブロック図である。第3実施形態に係るメッセージ中継装置は、第2実施形態に係るメッセージ中継装置と異なり、タスク紐付け部11Fが、エンキュー部11Cと一体となり、エンキュー及びタスク
紐付け部11Hとなっている。
エンキュー及びタスク紐付け部11Hは、第2実施形態におけるエンキュー部11Cの機能に加え、タスク管理データの紐付けを行う機能を有する。すなわち、エンキュー及びタスク紐付け部11Hは、タスクキューのキュー長を調査し、最もキュー長の短いタスクキューにタスクをエンキューする。このとき、エンキュー及びタスク紐付け部11Hは、エンキューを行うタスクのタスク管理データの紐付けを行う。なお、図24及び以下の説明では、第2実施形態との相違を明確にするべく、エンキュー及びタスク紐付け部を1つの機能ブロックとして説明しているが、エンキューに続けてタスク紐付けを行う処理順序であれば、エンキュー部及びタスク紐付け部の別々の機能ブロックで実現してもよい。
図25は、第3実施形態における紐付けタスク管理データ27の一例を示す。第3実施形態では、タスクをエンキューするごとに、そのエンキュー対象のタスクについてのみ紐付けを行うため、少なくとも、調査済みタスクキュー内最終位置を管理する必要がない。このため、紐付けタスク管理データ27は、図25に示すように、紐付け対象となるタスクの関数、及び、紐付け済みの最終タスクを含んだデータとなっている。
<4.3 メッセージ中継装置で実行される処理>
次に、本実施形態に係るメッセージ中継装置1において実行される処理について説明する。
図26は、各スレッドが実行する処理全体の流れの一例を示すフローチャートである。S71及びS72は、所定時間ごとに繰り返し実行される(ループG)。
S71では、コネクション受付部11A、タスク生成部11B並びにエンキュー及びタスク紐付け部11Hが、コネクション受付処理を実行する。
さらに、S72は、所定回数分だけ繰り返し実行される(ループH)。
S72では、デキュー部11D、タスク実行部11E、タスク生成部11B、エンキュー及びタスク紐付け部11H並びに紐付けタスク実行部11Gが、タスク実行処理を実行する。
コネクション受付処理及びタスク実行処理の内訳は、原則として第2実施形態と同様である(ただし、エンキュー部の代わりに、エンキュー及びタスク紐付け部11Hが処理主体となる)。ただし、タスク実行処理のS63においては、第2実施形態の処理に加え、エンキュー及びタスク紐付け部11Hは、次の処理を行う。
すなわち、エンキュー及びタスク紐付け部11Hは、第2実施形態と同様に、タスクキューテーブル22を参照し、すべてのタスクキューのキュー長を調査する。そして、最もキュー長の短いタスクキューを選択し、選択したタスクキューに対して、タスク生成部11Bが生成したタスクのエンキューを行う。
このとき、エンキュー及びタスク紐付け部11Hは、さらに、紐付けタスク管理データ27を参照し、紐付け対象タスクの関数のアドレスと、エンキュー対象のタスクのタスクデータに含まれる関数ポインタのアドレスとを比較する。両者が一致する場合には、エンキュー及びタスク紐付け部11Hは、エンキュー対象のタスク管理データと、紐付けタスク管理データ27の紐付け済みの最終タスクのタスク管理データとの紐付けを行う。ここで、エンキュー及びタスク紐付け部11Hは、タスクの紐付けが完了すると、紐付けタスク管理データ27の紐付け済みの最終タスクに、エンキュー対象のタスクをエンキューしたタスクキュー及びその設定アドレスを設定する。
<4.4 第3実施形態による効果、変形例等>
かかる第3実施形態によれば、各タスクのタスク管理データの紐付けが、タスクをエンキューするタイミングで行われる。このため、原則として、タスクキューにすでにエンキューされ、実行対象となり得るタスクにつき、より確実に紐付け済みの状態とすることができる。
なお、エンキュー及びタスク紐付け部11Hは、コネクション受付処理の段階においても、エンキュー対象のタスクの紐付け処理を行ってもよい。
[5.その他]
本技術の適用対象として、前述した実施形態で記載したメッセージ中継装置は一例に過ぎない。本技術は、複数のスレッドが、それぞれに対応付けられたタスクキューにエンキューされたタスクを処理する情報処理装置であれば、いかなる情報処理装置にも適用することができる。
また、本明細書で説明した情報処理装置の機能的構成及び物理的構成は、上述の態様に限るものではなく、例えば、各機能や物理資源を統合して実装したり、逆に、さらに分散して実装したりすることも可能である。
1…メッセージ中継装置、2…クライアント、3…サーバ、11,12…スレッド、11A…コネクション受付部、11B…タスク生成部、11C…エンキュー部、11D…デキュー部、11E…タスク実行部、11F…タスク紐付け部、11G…紐付けタスク実行部、11H…エンキュー及びタスク紐付け部、21…タスク実行順定義、22…タスクキューテーブル、23…コネクション情報、24…メッセージ情報、25…識別ルール、26…転送ルールテーブル、27…紐付けタスク管理データ、31,32…タスクキュー

Claims (7)

  1. 自スレッドに対応付けられたタスクキューに蓄積されたタスクをそれぞれ処理する複数のスレッドを所定数並列実行させる情報処理装置において、
    前記複数のスレッドのそれぞれが、
    1つの処理要求に対する一連のプログラム処理が分割された複数のタスクのうちの1つのタスクを生成するタスク生成部と、
    前記複数のスレッドのうちいずれか1つに対応付けられたタスクキューを選択し、該選択したタスクキューに、前記タスク生成部により生成されたタスクをエンキューするエンキュー部と、
    自スレッドに対応付けられたタスクキューにエンキューされたタスクをデキューするデキュー部と、
    前記デキュー部によりデキューされたタスクを実行するタスク実行部と
    を備えた情報処理装置。
  2. 前記エンキュー部は、最もキュー長が短いタスクキューを選択する請求項1記載の情報処理装置。
  3. 前記複数のスレッドのそれぞれに対応付けられたタスクキューにエンキューされたタスクのうち、同一機能を有するタスク同士の紐付けを行うタスク紐付け部と、
    前記タスク実行部が実行したタスクに、次に実行するタスクが紐付けされているときには、該紐付けされたタスクを、前記タスク実行部が実行したタスクに連続させて実行する紐付けタスク実行部と
    を備えた請求項1又は2に記載の情報処理装置。
  4. 前記タスク紐付け部は、前記エンキュー部によりタスクが新たにエンキューされたときに、該新たにエンキューされたタスクと、前記複数のスレッドのそれぞれに対応付けられたタスクキューにすでにエンキューされているタスクのうち、前記新たにエンキューされたタスクと同一機能を有するタスクとの紐付けを行う請求項3記載の情報処理装置。
  5. 前記複数のスレッドの数が、情報処理装置のCPUコアの数と一致している請求項1〜4のいずれか1つに記載の情報処理装置。
  6. 自スレッドに対応付けられたタスクキューに蓄積されたタスクをそれぞれ処理する複数のスレッドを所定数並列実行させる情報処理装置において、
    前記複数のスレッドのそれぞれが、
    1つの処理要求に対する一連のプログラム処理が分割された複数のタスクのうちの1つのタスクを生成し、
    前記複数のスレッドのうちいずれか1つに対応付けられたタスクキューを選択し、該選択したタスクキューに、前記生成したタスクをエンキューし、
    自スレッドに対応付けられたタスクキューにエンキューされたタスクをデキューし、
    前記デキューしたタスクを実行する
    処理を実行する情報処理方法。
  7. 自スレッドに対応付けられたタスクキューに蓄積されたタスクをそれぞれ処理する複数のスレッドを所定数並列実行させる情報処理装置において、
    前記複数のスレッドのそれぞれに、
    1つの処理要求に対する一連のプログラム処理が分割された複数のタスクのうちの1つのタスクを生成し、
    前記複数のスレッドのうちいずれか1つに対応付けられたタスクキューを選択し、該選
    択したタスクキューに、前記生成したタスクをエンキューし、
    自スレッドに対応付けられたタスクキューにエンキューされたタスクをデキューし、
    前記デキューしたタスクを実行する
    処理を実行させる情報処理プログラム。
JP2011190925A 2011-09-01 2011-09-01 情報処理装置、情報処理方法及び情報処理プログラム Expired - Fee Related JP5672199B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011190925A JP5672199B2 (ja) 2011-09-01 2011-09-01 情報処理装置、情報処理方法及び情報処理プログラム
US13/591,889 US8966484B2 (en) 2011-09-01 2012-08-22 Information processing apparatus, information processing method, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011190925A JP5672199B2 (ja) 2011-09-01 2011-09-01 情報処理装置、情報処理方法及び情報処理プログラム

Publications (2)

Publication Number Publication Date
JP2013054451A JP2013054451A (ja) 2013-03-21
JP5672199B2 true JP5672199B2 (ja) 2015-02-18

Family

ID=47754168

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011190925A Expired - Fee Related JP5672199B2 (ja) 2011-09-01 2011-09-01 情報処理装置、情報処理方法及び情報処理プログラム

Country Status (2)

Country Link
US (1) US8966484B2 (ja)
JP (1) JP5672199B2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130118593A (ko) * 2012-04-20 2013-10-30 한국전자통신연구원 데이터 분산 서비스를 위한 미들웨어에서 데이터를 처리하기 위한 장치 및 방법
US9952898B2 (en) * 2013-03-15 2018-04-24 Tact.Ai Technologies, Inc. Dynamic construction and management of task pipelines
US10515326B2 (en) * 2015-08-28 2019-12-24 Exacttarget, Inc. Database systems and related queue management methods
JP6532385B2 (ja) * 2015-11-02 2019-06-19 キヤノン株式会社 情報処理システムおよびその制御方法、並びにプログラム
CN105631708B (zh) * 2015-12-25 2020-10-16 腾讯科技(深圳)有限公司 一种信息处理方法及装置
US10203911B2 (en) * 2016-05-18 2019-02-12 Friday Harbor Llc Content addressable memory (CAM) implemented tuple spaces
CN107566297A (zh) * 2017-09-05 2018-01-09 荷花科技(北京)有限公司 物联网业务处理方法和系统
KR102549540B1 (ko) * 2017-09-22 2023-06-29 삼성전자주식회사 스토리지 장치 및 그 동작 방법
GB201905835D0 (en) * 2019-04-26 2019-06-12 Ibm On-premise and off-premise debugging
JP2022124361A (ja) * 2021-02-15 2022-08-25 富士通株式会社 情報処理装置、情報処理方法及び情報処理プログラム

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5447545A (en) 1977-09-22 1979-04-14 Nec Corp Multiple processor system
JPH04283849A (ja) * 1991-03-13 1992-10-08 Toshiba Corp マルチプロセッサシステム
JPH0969053A (ja) 1995-08-31 1997-03-11 Toshiba Corp メッセージ受信機構に於けるマルチスレッド制御方式及びキューイング方式
FR2792087B1 (fr) * 1999-04-07 2001-06-15 Bull Sa Procede d'amelioration des performances d'un systeme multiprocesseur comprenant une file d'attente de travaux et architecture de systeme pour la mise en oeuvre du procede
US7565651B1 (en) * 2000-05-25 2009-07-21 Oracle International Corporation Parallel task scheduling system for computers
US6834385B2 (en) * 2001-01-04 2004-12-21 International Business Machines Corporation System and method for utilizing dispatch queues in a multiprocessor data processing system
JP3975703B2 (ja) * 2001-08-16 2007-09-12 日本電気株式会社 情報処理システムにおける優先実行制御方法及びその装置並びにプログラム
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
BRPI0920541A2 (pt) * 2008-11-24 2018-11-06 Intel Corp sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial
US8799629B2 (en) * 2008-12-04 2014-08-05 Microsoft Corporation Parallel execution of a loop
US8990821B2 (en) * 2009-09-29 2015-03-24 International Business Machines Corporation Task dispatching based on composite queue size and upper and lower compare values
US8484154B2 (en) * 2009-12-14 2013-07-09 Intel Corporation Methods and systems to traverse graph-based networks
US8381004B2 (en) * 2010-05-26 2013-02-19 International Business Machines Corporation Optimizing energy consumption and application performance in a multi-core multi-threaded processor system

Also Published As

Publication number Publication date
US20130061229A1 (en) 2013-03-07
JP2013054451A (ja) 2013-03-21
US8966484B2 (en) 2015-02-24

Similar Documents

Publication Publication Date Title
JP5672199B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
US8051227B1 (en) Programmable queue structures for multiprocessors
CN109768939B (zh) 一种支持优先级的标签化网络栈方法和系统
US8619800B1 (en) Parallel processing using multi-core processor
US7219121B2 (en) Symmetrical multiprocessing in multiprocessor systems
TW200406672A (en) Free list and ring data structure management
CN101739296B (zh) 数据处理系统和方法
KR20140078756A (ko) 효율적인 작업 큐잉을 갖는 프로세서
JPH08227364A (ja) 順序付きマルチスレッド実行方法とその実行装置
WO2014166404A1 (zh) 一种网络数据包处理方法和装置
TW201237632A (en) Buffer management scheme for a network processor
US8594113B2 (en) Transmit-side scaler and method for processing outgoing information packets using thread-based queues
Hruby et al. On Sockets and System Calls: Minimizing Context Switches for the Socket {API}
EP2417737B1 (en) Transmit-side scaler and method for processing outgoing information packets using thread-based queues
WO2013185660A1 (zh) 一种网络处理器的指令存储装置及该装置的指令存储方法
US9247033B2 (en) Accessing payload portions of client requests from client memory storage hardware using remote direct memory access
Faraji et al. Design considerations for GPU‐aware collective communications in MPI
US20110321043A1 (en) System, Method and Program Product for Native Interface Optimization of Read-Only Arrays
JP5533538B2 (ja) 情報処理装置、エミュレーション処理プログラム及びエミュレーション処理方法
JP2009199384A (ja) データ処理装置
US20140019992A1 (en) Method of Parallel Processing of Ordered Data Streams
JP5359357B2 (ja) パケット処理装置、該処理装置に用いられるパケット処理順序制御方法及びパケット処理順序制御プログラム
JP4630262B2 (ja) キャッシュシステム、キャッシュ装置、パケット処理装置、キャッシュ方法、パケット処理方法、キャッシュプログラム、およびパケット処理プログラム
EP3365782B1 (en) System and method for providing mssq notifications in a transactional processing environment
CN117041208A (zh) Dns动态调节方法、网络架构、计算机设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140508

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20140514

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141113

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141125

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141208

R150 Certificate of patent or registration of utility model

Ref document number: 5672199

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees