JP5408353B2 - マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法 - Google Patents

マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法 Download PDF

Info

Publication number
JP5408353B2
JP5408353B2 JP2012524359A JP2012524359A JP5408353B2 JP 5408353 B2 JP5408353 B2 JP 5408353B2 JP 2012524359 A JP2012524359 A JP 2012524359A JP 2012524359 A JP2012524359 A JP 2012524359A JP 5408353 B2 JP5408353 B2 JP 5408353B2
Authority
JP
Japan
Prior art keywords
thread
response
request
processing
processing unit
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
JP2012524359A
Other languages
English (en)
Other versions
JPWO2012008016A1 (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
Publication of JPWO2012008016A1 publication Critical patent/JPWO2012008016A1/ja
Application granted granted Critical
Publication of JP5408353B2 publication Critical patent/JP5408353B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Description

本件は、マルチスレッド処理を行なうマルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法に関する。
現在、一般的に用いられているクライアント・サーバ方式の通信では、サーバ端末上のプログラムは、クライアント端末上のプログラムから送信されるデータの提供等の要求(リクエスト)に対して、所定の処理を実行し、応答(レスポンス)を返信する。これにより、クライアント端末上のプログラムは、サーバ端末上のプログラムから受信するレスポンスの内容に基づいて、リクエストに係る処理を継続することができる。
図8は、一般的なクライアント・サーバ間通信を行なうシステム100の構成例を示す図である。
クライアント端末200及びサーバ端末300は、ネットワーク250を介して相互に通信可能に接続されており、クライアント端末200からサーバ端末300へのリクエストに対して、サーバ端末300がクライアント端末200へレスポンスを返信する。
クライアント端末200は、マルチスレッド処理を実行することが可能であり、当該処理を実行するCPU(Central Processing Unit)210,記憶部220及び送受信部230をそなえる。
CPU210は、記憶部220に格納されたプログラムを読み出して、所定のマルチスレッド処理を行なう。
記憶部220は、種々のデータやプログラムを格納する記憶領域をそなえ、CPU210がプログラムを実行する際に、当該記憶領域に格納されたプログラムを読み出したり、データやプログラムを当該記憶領域に格納・展開して用いられる。
ここで、記憶部220は、図9を用いて後述する、オブジェクトを用いるマルチスレッドプログラムであるクライアントプログラム400を格納し、CPU210によって、クライアントプログラム400が読み出され、マルチスレッド処理が実行される。
また、サーバ端末300は、CPU310,記憶部320及び送受信部330をそなえる。
CPU310は、記憶部320に格納されたプログラムを読み出して、所定の処理を行なう。
記憶部320は、記憶部220と同様に、種々のデータやプログラムを格納する記憶領域をそなえる。
ここで、記憶部320は、図9を用いて後述するサーバプログラム500を格納し、CPU310によって、サーバ端末300における処理が実行される。
送受信部230及び330は、それぞれ、クライアント端末200及びサーバ端末300間で双方向にデータを送受信する。
送受信部230は、サーバ端末300に対してCPU210からのリクエストを送信するとともに、サーバ端末300からのレスポンスを受信してCPU210に受け渡す。
また、送受信部330は、クライアント端末200からのリクエストを受信してCPU310に受け渡すとともに、クライアント端末200に対してCPU310からのレスポンスを送信する。
図9は、クライアントプログラム400及びサーバプログラム500の構成例を示す図である。
クライアントプログラム400は、マルチスレッドOS配下で動作するプログラムであり、上述のように、クライアント端末200の記憶部220に格納され、CPU210によって記憶部220から読み込まれることによって実行される。
クライアントプログラム400は、スレッドプール410,オブジェクト430,及び受信待ちループ処理スレッド440をそなえる。
スレッドプール410は、クライアントプログラム400による処理において用いられるスレッドを格納するものであり、クライアントプログラム400によって生成される。また、クライアントプログラム400は、スレッドプール410の生成過程において、所定の数(ここでは3つ)のスレッド420−1〜420−3を生成する。
以下、スレッドを示す符号としては、複数のスレッドのうちの1つを特定する必要があるときには符号420−1〜420−3を用いるが、任意のスレッドを指すときには符号420を用いる。
オブジェクト430は、クライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクトである。
ここで、クライアント処理は、クライアントプログラム400における処理であるとともに、サーバ端末300のサーバプログラム500に対してリクエストを送信する処理である。また、レスポンス受信処理は、クライアント処理において送信したリクエストに対する、サーバプログラム500からのレスポンスを受信する処理である。さらに、レスポンス処理は、レスポンス受信処理で受信したレスポンスに関して、クライアントプログラム400において実行される処理である。
受信待ちループ処理スレッド440は、セレクト(select)関数による受信待ちループ処理を実行するスレッドである。
以下、受信待ちループ処理スレッド440を単にスレッド440ともいう。
具体的には、スレッド440は、サーバプログラム500のスレッド540から、レスポンスの送信開始を意味するデータを受信する。なお、セレクト関数は、サーバプログラム500からレスポンスの送信開始を示すデータを受信したことを判定した場合、あるいはタイムアウトした場合に終了、すなわち、制御がスレッド440に復帰する。
ここで、オブジェクト430が持つ処理や、セレクト関数による受信待ちループ処理は、クライアントプログラム400によって、スレッドプール410内のスレッド420のうちの、未使用状態のスレッド(以下、空スレッドという)が割り当てられることにより実行される。これにより、オブジェクト430が持つ処理や、セレクト関数による受信待ちループ処理は、当該割り当てられたスレッドにおいて実行される。
以下、オブジェクト430に対してスレッド420−1が割り当てられることとして説明する。
また、セレクト関数による受信待ちループ処理に対してスレッド420−2が割り当てられることとして説明する。従って、受信待ちループ処理スレッド440は、便宜上、その符号を440としているが、実際は、受信待ちループ処理スレッドは、スレッドプール内のスレッドであるスレッド420−2である。以下、受信待ちループ処理スレッド440を、スレッド420−2ともいう。
サーバプログラム500は、上述のように、サーバ端末300の記憶部320に格納され、CPU310によって記憶部320から読み込まれることによって実行される。
サーバプログラム500は、リクエスト処理を実行するスレッド540をそなえる。
スレッド540は、クライアントプログラム400から送信されるリクエストを受信するとともに、当該リクエストに対する所定の処理を実行し、当該リクエストの処理結果であるレスポンスをクライアントプログラム400に対して送信する。
また、スレッド540は、クライアントプログラム400へのレスポンスの送信に先立って、クライアントプログラム400の受信待ちループ処理スレッド440に対してレスポンスの送信開始を意味するデータを送信する。そして、当該データの送信後、クライアントプログラム400のオブジェクト430に対して、リクエストに対するレスポンスを送信する。
次に、クライアントプログラム400及びサーバプログラム500の動作について説明する。
クライアントプログラム400は、クライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクト430を生成すると、スレッドプール410から空スレッドを借用する。そして、クライアントプログラム400は、オブジェクト430を、その借用したスレッド(ここでは、スレッド420−1)に関連付けて(図9中、A101参照)、オブジェクト430におけるクライアント処理を実行させる。
クライアント処理では、スレッド420−1は、セレクト関数による受信待ちループ処理を行なう受信待ちループ処理スレッド440(スレッド420−2)に対して、受信開始を指示する(図9中、A102参照)。そして、スレッド440では、サーバプログラム500からのレスポンスの受信待ちをするループ処理が実行される。
その後、オブジェクト430が持つクライアント処理を実行するスレッド420−1によって、サーバプログラム500に対して任意のリクエストが送信される(図9中、A103参照)。
サーバプログラム500のスレッド540は、クライアントプログラム400から任意のリクエストが送信されるのを待ち受け、送信されてきたリクエストを受信する。また、スレッド540は、受信したリクエストを解釈して、そのリクエストに対応する任意の処理を、リクエスト処理を行なうスレッド540で実行する。
次いで、サーバプログラム500は、リクエスト処理の結果をクライアントプログラム400に送信するために、送信開始を意味するデータをクライアントプログラム400に対して送信する(図9中、A104参照)。
クライアントプログラム400では、受信待ちループ処理スレッド440において、送信開始を意味するデータを受信し、その旨をオブジェクト430に関連付けられているスレッド420−1に対して通知する(図9中、A105参照)。
サーバプログラム500は、送信開始を意味するデータをクライアントプログラム400に送信した後、リクエスト処理の実行結果を、リクエストに対するレスポンスとしてクライアントプログラム400に送信する(図9中、A106参照)。
クライアントプログラム400は、オブジェクト430と関連付けられているスレッド420−1で当該レスポンスを受信し、レスポンスに対する処理を行なう。
次に、図10を参照しながら、クライアントプログラム400及びサーバプログラム500における詳細な処理を説明する。
図10は、クライアントプログラム400及びサーバプログラム500の処理を説明するためのシーケンス図である。
はじめに、ユーザによってクライアントプログラム400が起動されると、クライアントプログラム400により、スレッドプール410が生成される(ステップS101)。また、スレッドプール410においては、その生成過程において、所定の数のスレッド420が生成される(ステップS102)。例えば、図9に示す例においては、クライアントプログラム400によって、スレッド420−1〜420−3の3つのスレッドが生成される。
そして、クライアントプログラム400によって、スレッドプール410から空スレッドが1つ借用される(ステップS103)。また、クライアントプログラム400により、借用されたスレッド(ここでは、スレッド420−2;受信待ちループ処理スレッド440)においてセレクト関数による受信待ちループ処理が実行され、受信開始指示待ちの状態になる(ステップS104)。その後、クライアントプログラム400の処理が終了し、制御がユーザに戻る(ステップS105)。
次いで、ユーザにより任意のリクエストがクライアントプログラム400に要求されると、クライアントプログラム400により、クライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクト430が生成される(ステップS106)。
また、クライアントプログラム400によって、スレッドプール410から空スレッド420が1つ借用される(ステップS107)。そして、クライアントプログラム400によって、ステップS106で生成されたオブジェクト430と、ステップS107で借用された空スレッドとが関連付けられ、当該関連付けられたスレッド(ここでは、スレッド420−1)が起動される(ステップS108)。
続いて、オブジェクト430に関連付けられたスレッド420−1によって、クライアント処理が実行され、受信開始指示待ち状態の受信待ちループ処理スレッド440に対して受信開始が指示される(ステップS109)。
そして、オブジェクト430が持つクライアント処理を実行するスレッド420−1により、サーバプログラム500に対するリクエストが送信される(ステップS110)。
サーバプログラム500では、リクエストが受信され、スレッド540によって、そのリクエストに対する任意の処理が実行される(ステップS111)。
サーバプログラム500では、スレッド540によるリクエストに対する処理が終了すると、サーバプログラム500によってレスポンスの送信開始がクライアントプログラム400に対して通知される(ステップS112)。
一方、クライアントプログラム400では、送信開始を通知されると、その旨が、クライアント処理を実行していた、オブジェクト430に関連付けられたスレッド420−1に伝えられる。そして、当該スレッド420−1によって、オブジェクト430のレスポンス受信処理が実行される(ステップS113)。
次いで、サーバプログラム500によって、レスポンスがクライアントプログラム400に対して送信される(ステップS114)。
スレッド420−1がレスポンス受信処理でレスポンスを受信し終えると、当該スレッド420−1は、受信したレスポンスに関する任意の処理(レスポンス処理)を実行する。そして、スレッド420−1は、クライアントプログラム400に対して、リクエストの結果を通知する(ステップS115)。
その後、クライアントプログラム400によって、借用されたスレッド420−1及び420−2(受信待ちループ処理スレッド440)がスレッドプール410に返却される。また、クライアントプログラム400によって、クライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクト430が、記憶部220等のクライアント端末200のリソースから削除(破棄)される(ステップS116)。
最後に、クライアントプログラム400により、ユーザにリクエストの結果が渡される(ステップS117)。
なお、ユーザによってクライアントプログラム400が終了させられる場合、クライアントプログラム400により、スレッドプール410が破棄される(ステップS118)。ここで、スレッドプール410は、その破棄過程において、ステップS102において生成した全てのスレッドを破棄する(ステップS119)。
そして、クライアントプログラム400の実行が終了し、クライアントプログラム400自体が破棄される(ステップS120)。
クライアント端末200及びサーバ端末300の間では、上述の如くリクエスト及びレスポンスの処理が行なわれる。
次に、図11を参照しながら、スレッド420−1及び420−2(受信待ちループ処理スレッド440)の処理について、スレッド420−1が起動されてから破棄されるまでの過程(図10のステップS108〜S116)をより詳細に説明する。
図11は、クライアントプログラム400における、クライアント処理,レスポンス受信処理及びレスポンス処理を行なうスレッド420−1並びに受信待ちループ処理を行なうスレッド420−2(受信待ちループ処理スレッド440)の処理を説明するためのフローチャートである。
はじめに、図10のステップS109において、スレッド420−1により、オブジェクト430のクライアント処理が実行されると、受信開始指示待ち状態の受信待ちループ処理スレッド440に対して受信開始が指示される(図11のステップT101)。
次いで、スレッド420−1により受信開始が指示された受信待ちループ処理スレッド440においては、セレクト関数によって、サーバプログラム500から送信されるレスポンスの送信開始を意味するデータが、指定タイムアウト時間まで待ち受けられる(ステップT102)。すなわち、セレクト関数によって、レスポンスの受信が可能になることを意味するサーバプログラム500からのデータが待ち受けられる。
そして、スレッド420−1では、受信待ちループ処理スレッド440に対して受信開始が指示されると、スレッド420−1によって、サーバプログラム500に対してリクエストが送信される(ステップT103)。
また、受信待ちループ処理スレッド440により、セレクト関数からの復帰が、タイムアウトによるものであるか否かが判断される(ステップT104)。
タイムアウトによってセレクト関数から復帰したと判断された場合は、受信待ちループ処理スレッド440により、再度、セレクト関数が呼び出されて受信待ちになる(ステップT104のYesルート)。
一方、ノンブロックでレスポンスが受信可能になったことによりセレクト関数から復帰したと判断された場合は(ステップT104のNoルート)、受信待ちループ処理スレッド440により、スレッド420−1に対してレスポンスの受信通知が行なわれる(図9中、A105参照)。ここで、ノンブロックでの受信とは、レスポンスの受信を待たずに行なえる他の処理を先に行ないつつ、レスポンスの受信の行なうことである。
続いて、ステップT104のNoルートにおいてレスポンスの受信通知を受け取ったスレッド420−1によって、オブジェクト430のレスポンス受信処理が行なわれる(ステップT105)。そして、スレッド420−1によって、そのレスポンスに対するオブジェクト430のレスポンス処理が実行される(ステップT106)。
スレッド420−1によるレスポンス処理が終了すると、クライアントプログラム400によって、借用していたスレッド420−1及び420−2がスレッドプール410に返却される。また、クライアントプログラム400によって、スレッド420−1と関連付けられたクライアント処理,レスポンス受信処理及びレスポンス処理を実行するオブジェクト430が破棄される(ステップT107)。
上述の処理により、オブジェクト430に関連付けられたスレッド420−1が終了する。
また、従来においては、セッション識別子が、サーバ・システムにおけるプロセスによってクライアント・システムからの要求と関連付けられ、サーバは、セッション識別子を含む応答をクライアント・システムに送る技術が知られている(例えば、特許文献1)。
さらに、データベースサーバ内でセッション開始時に新たなスレッドを生成してセッションに処理の実行を割り当てるとともに、クライアントへの返却時にセッション継続の指定がなければセッションのスレッドを終了させる技術が知られている(例えば、特許文献2)。
特表平11−510632号公報 特開平11−149449号公報 特開2000−29815号公報
クライアントプログラム400が使用する記憶部220の記憶領域の量を抑制するため、クライアントプログラム400によっては、スレッドプール410が管理するスレッド420の数が、例えば2,3個に制限されることがある。
この場合、上述のようなクライアントプログラム400は、受信待ちループ処理スレッド440でサーバプログラム500からレスポンスが送信されるのを待つ間、クライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクト430は使用されない。このため、その間、オブジェクト430を格納している記憶領域は、無駄に使用されている状態になるという問題がある。
また、クライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクト430と関連付けされたスレッド420−1は、上記の間、何も処理を実行していない状態になるため、スレッドプール410から借用したスレッドが有効に活用されない。そのため、クライアントプログラム400の処理性能が向上しないという問題がある。
特許文献1〜3の技術のいずれも、サーバ端末側におけるセッションやスレッドの管理に関するものであり、これらの技術によって、クライアント端末側における上述の問題を解決することは難しい。
ここまで、図8〜図11を参照しながら、クライアント・サーバ方式の通信においてクライアント端末200に生じる問題について説明したが、これに限られない。
例えば、ある端末上で動作するプログラムが、自身のプログラムの他のスレッド,又は自身の端末の他のプログラム等に対してリクエストを送信するとともに、他のスレッド等からレスポンスが返信される場合においても同様である。すなわち、リクエストを送信してから、他のスレッド等からレスポンスが返信されるまでの間は、リクエストを送信したプログラムにおけるクライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクトを格納している記憶領域は、無駄に使用されている状態になるという問題がある。
また、リクエストを送信したプログラムにおけるクライアント処理,レスポンス受信処理及びレスポンス処理を持つオブジェクトと関連付けされたスレッドは、上記の間、何も処理を実行していない状態になるため、スレッドプールから借用したスレッドが有効に活用されない。そのため、リクエストを送信したプログラムの処理性能が向上しないという問題がある。
上述の点に鑑み、本件の目的の1つは、処理を格納する記憶領域及び処理に関連付けられるスレッドの有効活用を図り、プログラムの処理性能の向上を実現することである。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
本件のマルチスレッド処理装置は、複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部と、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部と、をそなえ、該処理部は、該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、該管理部は、該処理部によって、該第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、該処理部によって、該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当て、該識別情報は、該第2の処理を実行するオブジェクトを生成する関数の関数ポインタであるものである。
また、本件の他のマルチスレッド処理装置は、上記のマルチスレッド処理装置のうち、該識別情報が、該第2の処理を実行するオブジェクトの先頭アドレスであるものである。
また、本件のマルチスレッド処理システムは、上述した本件のマルチスレッド処理装置と、該マルチスレッド処理装置と相互に通信可能に接続された他の装置と、をそなえるマルチスレッド処理システムであって、該処理部は、該他の装置に対して該リクエストを送信し、該他の装置は、該処理部から受信した該リクエストに対する該レスポンスを、該マルチスレッド処理装置に対して送信するものである。
また、本件のマルチスレッド処理プログラムは、複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部、および、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部、として、コンピュータを機能させるマルチスレッド処理プログラムであって、該処理部は、該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、該管理部は、該処理部によって、該第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、該処理部によって、該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当てるように、該コンピュータを機能させ、該識別情報は、該第2の処理を実行するオブジェクトを生成する関数の関数ポインタであるものである。
また、本件のマルチスレッド処理方法は、複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てて、該空スレッドが割り当てられた該一の処理を実行するマルチスレッド処理方法であって、該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、該第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当て、該識別情報は、該第2の処理を実行するオブジェクトを生成する関数の関数ポインタであるものである。
開示の技術によれば、処理を格納する記憶領域及び処理に関連付けられるスレッドの有効活用が図れ、プログラムの処理性能を向上させることができる。
第1実施形態の一例としてのクライアント・サーバ間通信を行なうシステムの構成例を模式的に示す図である。 第1実施形態の一例としてのクライアントプログラム及びサーバプログラムの構成例を示す図である。 クライアントプログラム及びサーバプログラムの処理を説明するためのシーケンス図である。 クライアントプログラムのスレッドにおける処理を説明するためのフローチャートである。 第1実施形態の変形例としてのクライアントプログラム及びサーバプログラムの構成例を示す図である。 クライアントプログラム及びサーバプログラムの処理の変形例を説明するためのシーケンス図である。 クライアントプログラムのスレッドにおける処理の変形例を説明するためのフローチャートである。 一般的なクライアント・サーバ間通信を行なうシステムの構成例を示す図である。 クライアントプログラム及びサーバプログラムの構成例を示す図である。 クライアントプログラム及びサーバプログラムの処理を説明するためのシーケンス図である。 クライアントプログラムのスレッドにおける処理を説明するためのフローチャートである。
以下、図面を参照して本発明の実施の形態を説明する。
(A)第1実施形態
(A−1)第1実施形態の構成
図1は、第1実施形態の一例としてのクライアント・サーバ間通信を行なうシステム10の構成例を模式的に示す図である。
図1に示すように、システム10は、先に説明した図8に示すシステム100と同様に、クライアント端末20とサーバ端末30とをそなえる。また、クライアント端末20及びサーバ端末30は、ネットワーク25を介して相互に通信可能に接続されており、クライアント端末20からサーバ端末30へのリクエストに対して、サーバ端末30がクライアント端末20へレスポンスを返信する。
クライアント端末20は、先に説明した図8に示すクライアント端末200と同様に、マルチスレッド処理を実行することが可能であり、当該処理を実行するCPU21,記憶部22及び送受信部23をそなえる。
CPU21は、記憶部22に格納されたクライアントプログラム40(図2参照)を読み出して、所定のマルチスレッド処理を行なうものであり、管理部21−1と処理部21−2とをそなえる。
管理部21−1は、クライアントプログラム40の起動後に、スレッドプール41(図2参照)を生成・管理するとともに、生成したスレッドプール41内に指定数分のスレッドを生成・管理する。なお、管理部21−1は、クライアントプログラム40の終了に際して、生成した指定数分のスレッドを全て破棄するとともに、スレッドプール41の破棄を行なう。
また、管理部21−1は、任意のオブジェクトの記憶部22の記憶領域への展開(生成)及び記憶領域からのオブジェクトの削除(破棄)を行なう。
さらに、管理部21−1は、複数のオブジェクトのうちの少なくとも1つのオブジェクトに対して、スレッドプール41内の複数のスレッドのうちの空スレッドを割り当てる。例えば、管理部21−1は、記憶部22の記憶領域等にスレッドプール41内のスレッドが空スレッドであるか否かを示すフラグをスレッド毎に対応付けた管理テーブルをそなえることができ、この管理テーブルを参照することで、オブジェクトに対して空スレッドを割り当てることができる。この場合、管理部21−1は、空スレッドに対してオブジェクトを割り当てた際に、管理テーブルにおいてオブジェクトに割り当てられたスレッドのフラグを、空スレッドを示すフラグから借用されていることを示すフラグに変更する。
処理部21−2は、クライアントプログラム40における所定の処理を実行する。本実施形態においては、処理部21−2は、管理部21−1によって処理等が割り当てられたスレッドにおける処理を実行する。
記憶部22は、種々のデータやプログラムを格納する記憶領域をそなえ、CPU21がプログラムを実行する際に、当該記憶領域に格納されたプログラムを読み出したり、データやプログラムを当該記憶領域に格納・展開して用いられる。
ここで、記憶部22は、図2を用いて後述する、所定の処理を持つオブジェクトを用いるマルチスレッドプログラムであるクライアントプログラム40を格納し、CPU21によって、マルチスレッド処理が実行される。
また、サーバ端末30は、先に説明した図8に示すサーバ端末300と同様に、CPU31,記憶部32及び送受信部33をそなえる。
CPU31は、記憶部32に格納された後述するサーバプログラム50を読み出して、所定の処理を行なう。
記憶部32は、記憶部22と同様に、種々のデータやプログラムを格納する記憶領域をそなえる。
ここで、記憶部32は、図2を用いて後述するサーバプログラム50を格納し、CPU31によって、サーバ端末30における処理が実行される。
なお、記憶部22及び32としては、例えば、RAM(Random Access Memory)等が挙げられる。
送受信部23及び33は、それぞれ、クライアント端末20及びサーバ端末30間で双方向にデータを送受信する。
送受信部23は、サーバ端末30に対してCPU21からのリクエストを送信するとともに、サーバ端末30からのレスポンスを受信してCPU21に受け渡す。
また、送受信部33は、クライアント端末20からのリクエストを受信してCPU31に受け渡すとともに、クライアント端末20に対してCPU31からのレスポンスを送信する。
なお、送受信部23及び33は、それぞれ、受信した又は送信するデータを一時的に格納する、図示しないバッファメモリをそなえる。
図2は、クライアントプログラム40及びサーバプログラム50の構成例を示す図である。
クライアントプログラム40は、マルチスレッドOS配下で動作するプログラムであり、上述のように、クライアント端末20の記憶部22に格納され、CPU21によって記憶部22から読み込まれることによって実行される。
クライアントプログラム40は、スレッドプール41,オブジェクト43−1,43−2,及び受信待ちループ処理スレッド44をそなえる。
スレッドプール41は、クライアントプログラム40による処理において用いられる複数のスレッドを生成し管理するものであり、クライアントプログラム40の起動後に管理部21−1によって生成される。また、クライアントプログラム40は、スレッドプール41の生成過程において、所定の数(ここでは3つ)のスレッド42−1〜42−3を生成する。
なお、スレッドプール41は、管理部21−1にそなえられる。
オブジェクト43−1は、クライアントプログラム40における処理を有するとともに、サーバ端末30のサーバプログラム50に対してリクエストを送信するクライアント処理を持つオブジェクトである。
従って、オブジェクト43−1は、先に説明した図9に示すオブジェクト430のクライアント処理に対応するオブジェクトである。
また、本実施形態においては、オブジェクト43−1は、サーバプログラム50に送信するリクエストに対して、レスポンス処理を実行するオブジェクト43−2を識別するための識別情報を付加する処理も有する。本実施形態においては、オブジェクト43−1は、識別情報として、レスポンス処理を実行するオブジェクト43−2の、記憶部22の記憶領域上の先頭アドレス45を用いる。
オブジェクト43−2は、レスポンス受信処理で受信したレスポンスに関して、クライアントプログラム40において実行される処理であるレスポンス処理を実行するオブジェクトである。
従って、オブジェクト43−2は、先に説明した図9に示すオブジェクト430のレスポンス処理に対応するオブジェクトである。
以下、スレッドを示す符号としては、複数のスレッドのうちの1つを特定する必要があるときには符号42−1〜42−3を用いるが、任意のスレッドを指すときには符号42を用いる。また、オブジェクトを示す符号としては、複数のオブジェクトのうちの1つを特定する必要があるときには符号43−1,43−2を用いるが、任意のオブジェクトを指すときには符号43を用いる。
受信待ちループ処理スレッド44は、セレクト関数による受信待ちループ処理を実行するとともに、レスポンス受信処理を実行するスレッドである。
従って、先に説明した図9に示すオブジェクト430のレスポンス受信処理は、受信待ちループ処理スレッド44によって実行される。
以下、受信待ちループ処理スレッド44を単にスレッド44ともいう。
具体的には、スレッド44は、サーバプログラム50のスレッド54から、レスポンスの送信開始を意味するデータを受信するとともに、レスポンスを受信する。
なお、セレクト関数は、サーバプログラム50からレスポンスの送信開始を示すデータを受信したことを判定した場合、あるいはタイムアウトした場合に終了、すなわち、制御がスレッド44に復帰する。
また、スレッド44は、レスポンス受信処理として、クライアント処理において送信したリクエストに対する、サーバプログラム50からのレスポンスを受信する。
さらに、スレッド44は、本実施形態においては、後述の如く、サーバプログラム50によってレスポンスに付加されたオブジェクト43−2の先頭アドレス45を取り出す。そして、スレッド44は、スレッドプール41から空スレッドを借用し、そのスレッドと、取り出したレスポンス処理を行なうオブジェクト43−2の先頭アドレス45とを関連付け、レスポンス処理を行なうスレッド42−3を実行する。
また、このスレッド44による処理は、クライアントプログラム40により、セレクト関数による受信待ちループ処理に対して、スレッドプール41内の空スレッドが割り当てられることによって実行される。なお、スレッド44による処理は、オブジェクト43−1が関連付けられたスレッド42−1によるリクエストの送信処理が開始される前に実行される。
以下、管理部1−1によって、オブジェクト43−1に対してスレッド42−1が割り当てられ、オブジェクト43−2に対してスレッド42−3が割り当てられることとして説明する。また、管理部21−1によって、セレクト関数による受信待ちループ処理及びレスポンス受信処理に対して、スレッドプール41内のスレッド42−2が割り当てられることとして説明する。従って、受信待ちループ処理スレッド44は、便宜上、その符号を44としているが、実際は、受信待ちループ処理スレッドは、スレッドプール内のスレッドであるスレッド42−2である。以下、受信待ちループ処理スレッド44を、スレッド42−2ともいう。
サーバプログラム50は、上述のように、サーバ端末30の記憶部32に格納され、CPU31によって記憶部32から読み込まれることによって実行される。
サーバプログラム50は、リクエスト処理を実行するスレッド54をそなえる。
スレッド54は、クライアントプログラム40から送信されるリクエストを受信するとともに、リクエストに付加されたオブジェクト43−2の先頭アドレス45を取り出し、記憶部32に格納する。そして、スレッド54は、リクエストの処理結果であるレスポンスに対して、記憶部32に格納したオブジェクト43−2の先頭アドレス45を付加して、受信待ちループ処理スレッド44に送信する。
また、スレッド54は、クライアントプログラム40へのレスポンスの送信に先立って、クライアントプログラム40の受信待ちループ処理スレッド44に対してレスポンスの送信開始を意味するデータを送信する。当該データの送信後、スレッド54は、受信待ちループ処理スレッド44に対して、オブジェクト43−2の先頭アドレス45を付加したレスポンスを送信する。
(A−2)第1実施形態の動作
次に、クライアントプログラム40及びサーバプログラム50の動作について説明する。
クライアントプログラム40は、クライアント処理を持つオブジェクト43−1を生成すると、スレッドプール41から空スレッドを借用する。そして、クライアントプログラム40は、オブジェクト43−1を、その借用したスレッド(ここでは、スレッド42−1)に関連付けて(図2中、A1参照)、オブジェクト43−1におけるクライアント処理を実行する。
クライアント処理では、スレッド42−1は、セレクト関数による受信待ちループ処理を行なう受信待ちループ処理スレッド44(スレッド42−2)に対して、受信開始を指示する(図2中、A2参照)。そして、スレッド44では、サーバプログラム50からのレスポンスのセレクト関数による受信待ちをするループ処理が実行される。
また、クライアント処理を実行するスレッド42−1は、レスポンス処理を持つオブジェクト43−2の記憶領域上の先頭アドレス45を取得し、サーバプログラム50に対して送信する任意のリクエストデータに、取得した先頭アドレス45を付加する(図2中、A3参照)。
その後、スレッド42−1は、サーバプログラム50に対して先頭アドレス45を付加した任意のリクエストを送信する(図2中、A4参照)。
サーバプログラム50のスレッド54は、クライアントプログラム40から任意のリクエストが送信されるのを待ち受け、送信されてきたリクエストを受信するとともに、リクエストに付加された先頭アドレス45を取り出す。また、スレッド54は、受信したリクエストを解釈して、そのリクエストに対応する任意の処理を、リクエスト処理を行なうスレッド54で実行する。さらに、スレッド54は、リクエスト処理の結果であるレスポンスに対して、取り出した先頭アドレス45を付加する(図2中、A5参照)。
次いで、スレッド54は、レスポンスをクライアントプログラム40に送信するために、送信開始を意味するデータをクライアントプログラム40に対して送信する(図2中、A6参照)。
そして、スレッド54は、送信開始を意味するデータをクライアントプログラム40に送信した後、先頭アドレス45を付加したレスポンスをクライアントプログラム40に送信する(図2中、A7参照)。
クライアントプログラム40では、受信待ちループ処理スレッド44が、送信開始を意味するデータを受信する。そして、スレッド44は、レスポンス受信処理において、先頭アドレス45が付加されたレスポンスを受信し、受信したレスポンスに付加された先頭アドレス45から、オブジェクト43−2を取得する(図2中、A8参照)。
また、スレッド44は、スレッドプール41から空スレッドを借用する。そして、スレッド44は、取得したオブジェクト43−2を、その借用したスレッド(ここでは、スレッド42−3)に関連付ける(図2中、A9参照)。
以降、クライアントプログラム40は、上述の如くスレッド42−3に対応付けたオブジェクト43−2におけるレスポンス処理を実行する。
ここで、上述のようなクライアントプログラム40及びサーバプログラム50における処理は、クライアント端末20及びサーバ端末30における管理部21−1及び処理部21−2等において、以下のように実行される。
管理部21−1は、クライアントプログラム40が起動されると、スレッドプール41を生成するとともに、所定の数のスレッド42を生成する。以後、管理部21−1は、スレッドプール41内のスレッド42を管理し、処理部21−2による、クライアント処理(第1の処理),レスポンス処理(第2の処理),受信待ちループ処理及びレスポンス受信処理等の実行に際して、当該処理を空スレッドに対して割り当てる。
処理部21−2がスレッド42−1においてリクエストを送信する前に、管理部21−1は、受信待ちループ処理スレッド44として、リクエストに対するレスポンスを受信する処理を空スレッド42−2に割り当てる。
また、処理部21−2は、リクエストを送信する前に、受信待ちループ処理スレッド44(スレッド42−2)によりレスポンスを受信する処理を開始する。
そして、処理部21−2は、スレッド42−1の処理において、レスポンス処理(第2の処理)を識別(特定)するための識別情報、すなわち、本実施形態においてはレスポンス処理を持つオブジェクト43−2の先頭アドレス45を付加して、リクエストを送信する。
管理部21−1は、処理部21−2によって、クライアント処理(第1の処理)からリクエストが送信された場合に、クライアント処理に割り当てられたスレッド42−1を解放して空スレッドにする。すなわち、管理部21−1は、クライアント処理を持つオブジェクト43−1とスレッド42−1との関連付けを解放する。そして、管理部21−1は、クライアント処理(第1の処理)を終了させる。すなわち、管理部21−1は、クライアント処理を持つオブジェクト43−1を記憶部22の記憶領域から削除する。
一方、リクエストの送信先としてのサーバプログラム50は、リクエストに付加された識別情報をレスポンスに付加して、処理部21−2に対して返信する。
管理部21−1は、処理部21−2によって、リクエストに対するレスポンスが受信されると、処理部21−2が受信したレスポンスに付加された識別情報に基づいて、複数の処理のうちのレスポンスに関する処理を実行するレスポンス処理(第2の処理)に対して空スレッドを割り当てる。すなわち、管理部21−1は、レスポンス処理を持つオブジェクト43−2を空スレッド42−3に割り当てる。
次に、図3を参照しながら、クライアントプログラム40及びサーバプログラム50における詳細な処理を説明する。
図3は、クライアントプログラム40及びサーバプログラム50の処理を説明するためのシーケンス図である。
はじめに、ユーザによってクライアントプログラム40が起動されると、クライアントプログラム40により、スレッドプール41が生成される(ステップS1)。また、スレッドプール41においては、その生成過程において、所定の数のスレッド42が生成される(ステップS2)。例えば、図2に示す例においては、クライアントプログラム40によって、スレッド42−1〜42−3の3つのスレッドが生成される。
そして、クライアントプログラム40によって、スレッドプール41から空スレッドが1つ借用される(ステップS3)。また、クライアントプログラム40により、借用されたスレッド(ここでは、スレッド42−2;受信待ちループ処理スレッド44)を用いてセレクト関数による受信待ちループ処理が実行され、受信開始指示待ちの状態になる(ステップS4)。その後、クライアントプログラム40の処理が終了し、制御がユーザに戻る(ステップS5)。
次いで、ユーザにより任意のリクエストがクライアントプログラム40に要求されると、クライアントプログラム40により、クライアント処理を持つオブジェクト43−1及びレスポンス処理を持つオブジェクト43−2がそれぞれ生成される(ステップS6)。
また、クライアントプログラム40によって、スレッドプール41から空スレッド42が1つ借用される(ステップS7)。そして、クライアントプログラム40によって、ステップS6で生成されたクライアント処理を持つオブジェクト43−1と、ステップS7で借用された空スレッドとが関連付けられ、当該関連付けられたスレッド(ここでは、スレッド42−1)が起動される(ステップS8)。
続いて、オブジェクト43−1に関連付けられたスレッド42−1によって、クライアント処理が実行され、受信開始指示待ち状態の受信待ちループ処理スレッド44に対して受信開始が指示される(ステップS9)。
そして、オブジェクト43−1が持つクライアント処理を実行するスレッド42−1により、サーバプログラム50に対するリクエストが送信される(ステップS10)。
このとき、本実施形態においては、スレッド42−1は、リクエストに対して、レスポンス処理を持つオブジェクト43−2の先頭アドレス45を付加して送信し、送信が完了すると、リクエスト送信済みをクライアントプログラム40に通知する。リクエスト送信済みが通知されると、クライアントプログラム40は、借用したスレッド42−1をスレッドプール41に返却するとともに、生成したオブジェクト43−1を破棄する。
これにより、クライアントプログラム40は、オブジェクト43−1が展開されていた記憶部22の記憶領域を他の処理で使用できるようになる。また、オブジェクト43−1が関連付けられていたスレッド42−1が、返却されることにより空スレッドとなるため、クライアントプログラム40は、スレッド42−1を他の処理に割り当てることができるようになる。
次いで、サーバプログラム50では、リクエストが受信され、スレッド54によって、そのリクエストに対する任意の処理が実行される(ステップS11)。
このとき、本実施形態においては、スレッド54によって、受信したリクエストに付加されたレスポンス処理を持つオブジェクト43−2の先頭アドレス45が取り出され、サーバ端末30の記憶部32等に一時的に保持される。
サーバプログラム50では、スレッド54によるリクエストに対する処理が終了すると、サーバプログラム50によってレスポンスの送信開始がクライアントプログラム40に対して通知される(ステップS12)。
一方、クライアントプログラム40では、送信開始を通知されると、その旨が、レスポンス受信処理を実行するスレッド42−2(受信待ちループ処理スレッド44)に伝えられる。そして、クライアントプログラム40では、当該受信待ちループ処理スレッド44によって、レスポンス受信処理が実行される(ステップS13)。
次いで、サーバプログラム50のスレッド54によって、レスポンスがクライアントプログラム40に対して送信される(ステップS14)。
このとき、本実施形態においては、スレッド54によって、記憶部32等に一時的に保持していたレスポンス処理を持つオブジェクト43−2の先頭アドレス45が取り出され、レスポンスに付加して送信される。スレッド44がレスポンスを受信し終えると、本実施形態においては、スレッド44によって、受信したレスポンスからレスポンス処理を持つオブジェクト43−2の先頭アドレス45が取り出され、オブジェクト43−2が取得される。また、スレッド44によって、スレッドプール41から空スレッドが借用されるとともに、取得されたオブジェクト43−2が当該空スレッド(ここでは、スレッド42−3)に関連付けられる。さらに、スレッド44によって、スレッド42−3が起動される。そして、スレッド42−3によって、任意のレスポンス処理が実行されるとともに、レスポンス処理の結果がクライアントプログラム40に対して通知される(ステップS15)。
その後、クライアントプログラム40によって、借用されたスレッド42−3がスレッドプール41に返却される。また、クライアントプログラム40によって、レスポンス処理を持つオブジェクト43−2が、記憶部22の記憶領域、すなわちクライアント端末20のリソースから削除(破棄)される(ステップS16)。
最後に、クライアントプログラム40により、ユーザにリクエストの結果が渡される(ステップS17)。
なお、ユーザによってクライアントプログラム40が終了させられる場合、クライアントプログラム40により、スレッドプール41が破棄される(ステップS18)。ここで、スレッドプール41は、その破棄過程において、ステップS2において生成した全てのスレッドを破棄する(ステップS19)。
そして、クライアントプログラム40の実行が終了し、クライアントプログラム40自体が破棄される(ステップS20)。
本実施形態におけるクライアント端末20及びサーバ端末30の間では、上述の如くリクエスト及びレスポンスの処理が行なわれる。
次に、図4を参照しながら、スレッド42−1〜42−3の処理について、スレッド42−1が起動されてからスレッド42−3が破棄されるまでの過程(図3のステップS8〜S16)をより詳細に説明する。
図4は、クライアントプログラム40における、クライアント処理を行なうスレッド42−1,受信待ちループ処理を行なうスレッド42−2(受信待ちループ処理スレッド44)及びレスポンス処理を行なうスレッド42−3の処理を説明するためのフローチャートである。
はじめに、図3のステップS9において、スレッド42−1により、オブジェクト43−1のクライアント処理が開始されると、受信開始指示待ち状態の受信待ちループ処理スレッド44に対して受信開始が指示される(図4のステップT1)。
次いで、スレッド42−1により受信開始が指示された受信待ちループ処理スレッド44においては、セレクト関数によって、サーバプログラム50から送信されるレスポンスの送信開始を意味するデータが、指定タイムアウト時間まで待ち受けられる(ステップT2)。すなわち、セレクト関数によって、サーバプログラム50からのレスポンスの受信が可能になることを意味するデータが待ち受けられる。
そして、スレッド42−1では、受信待ちループ処理スレッド44に対して受信開始が指示されると、スレッド42−1によって、サーバプログラム50に対して任意のリクエストが送信される(ステップT3)。
このとき、スレッド42−1により、レスポンス処理を持つオブジェクト43−2への先頭アドレス45がリクエストに付加されて送信されるとともに、クライアントプログラム40に対してリクエストを送信したことが通知される。
そして、リクエストの送信がスレッド42−1から通知されると、クライアントプログラム40によって、オブジェクト43−1とスレッド42−1との関連付けが解放され、スレッド42−1がスレッドプール41に返却される(ステップT4)。また、クライアントプログラム40によって、クライアント処理を持つオブジェクト43−1が破棄される(ステップT5)。
これにより、クライアント処理を実行するスレッド42−1が終了される。
一方、受信待ちループ処理スレッド44においては、上述したステップT1以降、セレクト関数によって、サーバプログラム50から送信されるレスポンスの送信開始を意味するデータが待ち受けられている。
ここで、セレクト関数は、上述のように、レスポンスの送信開始を意味するデータの受信又は指定タイムアウト時間の経過により終了し、制御がスレッド44に復帰する。
このため、スレッド44においては、セレクト関数からの復帰が、タイムアウトによるものであるか否かが判断される(ステップT6)。
スレッド44において、タイムアウトによってセレクト関数から復帰したと判断された場合は、スレッド44により、再度、セレクト関数が呼び出されて受信待ちになる(ステップT6のYesルート)。
一方、ノンブロックでレスポンスが受信可能になったことによりセレクト関数から復帰したと判断された場合は(ステップT6のNoルート)、スレッド44で実行されるレスポンス受信処理によって、サーバプログラム50から送信されたレスポンスが受信される。このとき、スレッド44によって、レスポンスに付加されたレスポンス処理を持つオブジェクト43−2の先頭アドレス45が取得される(ステップT7)。
また、レスポンス受信処理が実行されるスレッド44によって、スレッドプール41から空スレッドが借用される(ステップT8)。そして、スレッド44によって、取得されたレスポンス処理を持つオブジェクト43−2の先頭アドレス45が空スレッド(ここでは、42−3)に関連付けられるとともに、レスポンス処理を実行するスレッド42−3が開始される(ステップT9)。
続いて、レスポンス処理を実行するスレッド42−3によって、スレッド44で受信したレスポンスに対するレスポンス処理が実行される(ステップT10)。
スレッド42−3によるレスポンス処理が終了すると、クライアントプログラム40によって、オブジェクト43−2とスレッド42−3との関連付けが解放され、スレッド42−3がスレッドプール41に返却される(ステップT11)。また、クライアントプログラム40によって、レスポンス処理を持つオブジェクト43−2が破棄される(ステップT12)。
これにより、レスポンス処理を実行するスレッド42−3が終了される。
上述の手順により、クライアント・サーバ間通信が行なわれる。
このように、本実施形態の一例としての管理部21−1及び処理部21−2によれば、処理部21−2によって、複数の処理のうちのクライアント処理(第1の処理)、すなわち、クライアント処理を持つオブジェクト43−1からリクエストが送信された場合に、管理部21−1により、クライアント処理(第1の処理)に割り当てられたスレッド42−1が解放されて空スレッドにされる。そして、管理部21−1により、クライアント処理(第1の処理)が終了させられる。すなわち、管理部21−1により、クライアント処理を持つオブジェクト43−1が記憶部22の記憶領域から削除される。
また、処理部21−2によって、リクエストに対するレスポンスが受信されると、管理部21−1により、複数の処理のうちのレスポンスに関する処理を実行するレスポンス処理に対して空スレッドが割り当てられる。すなわち、管理部21−1により、レスポンス処理を持つオブジェクト43−2が空スレッド42−3に割り当てられる。
このように、本実施形態によれば、リクエストを送信するクライアント処理(オブジェクト43−1)と、レスポンスに関する処理を実行するレスポンス処理(オブジェクト43−2)とが分離される。これにより、処理部21−2によるリクエストの送信後、管理部21−1は、クライアント処理(第1の処理)が割り当てられたスレッド42−1を解放して空スレッドにする。すなわち、管理部21−1は、クライアント処理を持つオブジェクト43−1とスレッド42−1との関連付けを解放し、オブジェクト43−1を格納した記憶部22の記憶領域を解放することができる。
従って、記憶部22の記憶領域が他の用途に使用可能になり、記憶領域の有効活用を図ることができる。
また、スレッド42−1を解放して空スレッドにすることで、スレッド42−1を他の処理に用いることが可能となり、スレッドの有効活用を図ることができ、クライアントプログラム40の処理性能を向上させることができる。
また、スレッド44によるレスポンスの受信後に、管理部21−1により、レスポンス処理(第2の処理)に対して空スレッドが割り当てられる。すなわち、管理部21−1により、レスポンス処理を持つオブジェクト43−2に空スレッド43−3が割り当てられるため、リクエストの送信後レスポンスの受信までの間はスレッド43−3を空スレッドとしておくことができる。
従って、スレッド44によってレスポンスが受信されるまでは、スレッド42−3を他の処理に用いることが可能となり、スレッドの有効活用を図ることができ、クライアントプログラム40の処理性能を向上させることができる。
また、本実施形態の一例としての管理部21−1及び処理部21−2によれば、処理部21−2により、レスポンス処理(第2の処理)を識別するための識別情報、すなわち、本実施形態においては、レスポンス処理を持つオブジェクト43−2の先頭アドレス45が付加されて、リクエストが送信される。そして、リクエストに付加された識別情報をリクエストの送信先としてのサーバプログラム50により付加されたレスポンスが、処理部21−2によって受信されると、管理部21−1により、処理部21−2が受信したレスポンスに付加された識別情報に基づいて、レスポンスに関する処理を実行するレスポンス処理(第2の処理)に対して空スレッドが割り当てられる。すなわち、管理部21−1により、レスポンス処理を持つオブジェクト43−2が空スレッド42−3に割り当てられる。
このように、処理部21−2は、クライアント処理(第1の処理)において、送信するリクエストに対して、サーバプログラム50からのレスポンスを受信後にクライアントプログラム40が再開する処理を特定するための識別情報を付加する。本実施形態においては、処理部21−2は、送信するリクエストに対して、レスポンス処理(第2の処理)を識別するための識別情報として、レスポンス処理を持つオブジェクト43−2の先頭アドレス45を付加する。これにより、クライアントプログラム40がオブジェクト43−1を終了させても、スレッド44は、レスポンスの受信時に、当該識別情報に基づいてレスポンス処理を持つオブジェクト43−2を確実に特定し、レスポンス処理、すなわち、クライアントプログラム40の再開処理を実行することができる。
さらに、本実施形態の一例としての管理部21−1は、複数のスレッド42を予め生成し管理するスレッドプール41をそなえる。
このように、管理部21−1は、スレッドプール41に予め複数のスレッド42を生成しておくことで、クライアント処理(第1の処理)及びレスポンス処理(第2の処理)並びに受信待ちループ処理及びレスポンス受信処理等を既存の空スレッドに割り当てることができる。これにより、クライアントプログラム40(管理部21−1)は、クライアント処理及びレスポンス処理並びに受信待ちループ処理及びレスポンス受信処理等を割り当てる都度、スレッドを生成せずに済み、クライアントプログラム40の処理性能を向上させることができる。
(B)第1実施形態の変形例
(B−1)第1実施形態の変形例の構成
第1実施形態の一例としてのクライアントプログラム40及びサーバプログラム50については、上述した動作に限らず、例えば以下に図5〜図7を参照しながら説明する第1実施形態の変形例のように実行してもよい。
なお、この変形例としてのクライアントプログラム40′及びサーバプログラム50′においても、以下、特に説明のない限り、上述した第1実施形態の一例としてのクライアントプログラム40及びサーバプログラム50と同様の構成をそなえるため、その説明を省略する。
本変形例においては、スレッド42−1によるリクエストには、オブジェクト43−2を識別するための識別情報として、オブジェクト43−2の先頭アドレス45の代わりに、オブジェクト43−2を生成する生成関数46の関数ポインタ47が付加される。
図5は、クライアントプログラム40′及びサーバプログラム50′の構成例を示す図である。
クライアントプログラム40′は、先に説明した図2に示すクライアントプログラム40と比較して、オブジェクト43−1の代わりにオブジェクト43−1′を、受信待ちループ処理スレッド44の代わりに受信待ちループ処理スレッド44′をそなえる。
また、クライアントプログラム40′は、新たにオブジェクト生成関数46及び関数ポインタ47をそなえる。
オブジェクト43−1′は、図2に示すオブジェクト43−1と比較して、処理部21−2により、スレッド42−1において送信されるリクエストに対して、オブジェクト43−1を生成する生成関数46の関数ポインタ47を付加する点が異なる。
受信待ちループ処理スレッド44′(以下、単にスレッド44′ともいう)は、処理部21−2によるレスポンス受信処理において、後述の如く、サーバプログラム50′によってレスポンスに付加されたオブジェクト43−2を生成する生成関数46の関数ポインタ47を取り出す。そして、スレッド44′は、処理部21−2によって、取り出した関数ポインタ47によってレスポンス処理を持つオブジェクト43−2を生成する生成関数46を呼び出して、オブジェクト43−2を生成する。また、スレッド44′は、管理部21−1によって、スレッドプール41から空スレッドを借用し、そのスレッドと、取り出したレスポンス処理を行なうオブジェクト43−2とを関連付け、レスポンス処理を行なうスレッド42−3を実行する。
このように、本変形例においては、オブジェクト43−2は、クライアントプログラム40′が起動されてから、スレッド44′がサーバプログラム50′から受信したレスポンスから関数ポインタ47を取り出すまでは生成されない。
以下、管理部1−1によって、オブジェクト43−1′に対してスレッド42−1が割り当てられ、オブジェクト43−2に対してスレッド42−3が割り当てられることとして説明する。また、管理部21−1によって、セレクト関数による受信待ちループ処理及びレスポンス受信処理に対して、スレッドプール41内のスレッド42−2が割り当てられることとして説明する。従って、受信待ちループ処理スレッド44′は、便宜上、その符号を44′としているが、実際は、受信待ちループ処理スレッドは、スレッドプール内のスレッドであるスレッド42−2である。以下、受信待ちループ処理スレッド44′を、スレッド42−2ともいう。
サーバプログラム50′は、先に説明した図2に示すサーバプログラム50と比較して、スレッド54の代わりにスレッド54′をそなえる。
スレッド54′は、クライアントプログラム40′から受信したリクエストに付加された関数ポインタ47を取り出し、記憶部32に格納する。そして、スレッド54′は、リクエストの処理結果であるレスポンスに対して、記憶部32に格納した関数ポインタ47を付加して、受信待ちループ処理スレッド44′に送信する。
(B−2)第1実施形態の変形例の動作
次に、クライアントプログラム40′及びサーバプログラム50′の動作について説明する。
この図5に示す手順では、図2に示すA3〜A5及びA7に替えて、A3′〜A5′及びA7′が実行されるとともに、新たにA8−1及びA8−2が実行される。また、この図5に示す手順では、図2に示すA8は実行されない。
なお、図中、既述の符号と同一の符号が付された手順は、同一もしくは略同一の手順を示しているので、その説明の一部を省略する。
以下、処理部21−2により、スレッド44′において、サーバプログラム50からのレスポンスのセレクト関数による受信待ちをするループ処理が実行されている場合について説明する。
クライアント処理を実行するスレッド42−1は、レスポンス処理を持つオブジェクト43−2の生成関数46の関数ポインタ47を取得し、サーバプログラム50′に対して送信する任意のリクエストデータに、取得した関数ポインタ47を付加する(図5中、A3′参照)。
その後、スレッド42−1は、サーバプログラム50′に対して関数ポインタ47を付加した任意のリクエストを送信する(図5中、A4′参照)。
サーバプログラム50′のスレッド54′は、クライアントプログラム40′から任意のリクエストが送信されるのを待ち受け、送信されてきたリクエストを受信するとともに、リクエストに付加された関数ポインタ47を取り出す。また、スレッド54′は、受信したリクエストを解釈して、そのリクエストに対応する任意の処理を、リクエスト処理を行なうスレッド54で実行する。さらに、スレッド54は、リクエスト処理の結果であるレスポンスに対して、取り出した関数ポインタ47を付加する(図5中、A5′参照)。
次いで、スレッド54′は、レスポンスをクライアントプログラム40′に送信するために、送信開始を意味するデータをクライアントプログラム40′に対して送信する(図5中、A6参照)。
そして、スレッド54′は、送信開始を意味するデータをクライアントプログラム40′に送信した後、関数ポインタ47を付加したレスポンスをクライアントプログラム40′に送信する(図5中、A7′参照)。
クライアントプログラム40′では、受信待ちループ処理スレッド44′が、送信開始を意味するデータを受信する。そして、スレッド44′は、レスポンス受信処理において、受信したレスポンスに付加された関数ポインタ47から生成関数46を読み出し(図5中、A8−1参照)、生成関数46を実行してオブジェクト43−2を生成する(図5中、A8−2参照)。
また、スレッド44′は、スレッドプール41から空スレッドを借用する。そして、スレッド44′は、生成したオブジェクト43−2を、その借用したスレッド(ここでは、スレッド42−3)に関連付ける(図5中、A9参照)。
以降、クライアントプログラム40′は、処理部21−2によって、上述の如く生成したオブジェクト43−2におけるレスポンス処理を実行する。
次に、図6を参照しながら、クライアントプログラム40′及びサーバプログラム50′における詳細な処理を説明する。
図6は、クライアントプログラム40′及びサーバプログラム50′の処理を説明するためのシーケンス図である。
この図6に示す手順では、図3に示すステップS6,S10,S11,S14及びS15に替えて、ステップS6′,S10′,S11′,S14′及びS15′が実行される。
なお、図中、既述の符号と同一の符号が付されたステップは、同一もしくは略同一のステップを示しているので、その説明の一部を省略する。
以下、処理部21−2により、ユーザにより任意のリクエストがクライアントプログラム40に要求された場合について説明する。
クライアントプログラム40により、クライアント処理を持つオブジェクト43−1が生成される(ステップS6′)。
このとき、本変形例では、レスポンス処理を持つオブジェクト43−2が占有する分の記憶部22の記憶領域を他の処理で使用することができる。
また、オブジェクト43−1にスレッド42−1が関連付けられ、スレッド42−1が実行されて、受信開始指示待ち状態の受信待ちループ処理スレッド44′に対して受信開始が指示される(ステップS7〜S9)。
そして、オブジェクト43−1′が持つクライアント処理を実行するスレッド42−1により、サーバプログラム50′に対するリクエストが送信される(ステップS10′)。
このとき、本変形例においては、スレッド42−1は、リクエストに対して、レスポンス処理を持つオブジェクト43−2を生成する生成関数46の関数ポインタ47を付加して送信し、送信が完了すると、リクエスト送信済みをクライアントプログラム40′に通知する。リクエスト送信済みが通知されると、クライアントプログラム40′は、借用したスレッド42−1をスレッドプール41に返却するとともに、生成したオブジェクト43−1′を破棄する。
これにより、クライアントプログラム40は、オブジェクト43−1が展開されていた記憶部22の記憶領域を他の処理で使用できるようになる。また、オブジェクト43−1が関連付けられていたスレッド42−1が、返却されることにより空スレッドとなるため、クライアントプログラム40は、スレッド42−1を他の処理に割り当てることができるようになる。
次いで、サーバプログラム50′では、リクエストが受信され、スレッド54′によって、そのリクエストに対する任意の処理が実行される(ステップS11′)。
このとき、本実施形態においては、スレッド54′によって、受信したリクエストに付加された関数ポインタ47が取り出され、サーバ端末30の記憶部32等に一時的に保持される。
また、サーバプログラム50′からレスポンスの送信開始がクライアントプログラム40に対して通知され、クライアントプログラム40′によって、受信待ちループ処理スレッド44′によって、レスポンス受信処理が実行される(ステップS12,S13)。
次いで、サーバプログラム50′のスレッド54′によって、レスポンスがクライアントプログラム40′に対して送信される(ステップS14′)。
このとき、本変形例においては、スレッド54′によって、記憶部32等に一時的に保持していたレスポンス処理を持つオブジェクト43−2を生成する生成関数46の関数ポインタ47が取り出され、レスポンスに付加して送信される。スレッド44′がレスポンスを受信し終えると、本変形例においては、スレッド44′によって、受信したレスポンスからレスポンス処理を持つオブジェクト43−2を生成する生成関数46の関数ポインタ47が取り出される。そして、スレッド44′によって、生成関数46を呼び出すことによって、オブジェクト43−2が生成される。また、スレッド44′によって、スレッドプール41から空スレッドが借用されるとともに、生成されたオブジェクト43−2が当該空スレッド(ここでは、スレッド42−3)に関連付けられる。さらに、スレッド44′によって、スレッド42−3が起動される。そして、スレッド42−3によって、任意のレスポンス処理が実行されるとともに、レスポンス処理の結果がクライアントプログラム40′に対して通知される(ステップS15′)。
以降、ステップS16〜S20において、スレッド42−3の返却,オブジェクト43−2の削除がされ、クライアントプログラム40により、ユーザにリクエストの結果が渡される(ステップS16,S17)。
また、ユーザによってクライアントプログラム40が終了させられる場合、クライアントプログラム40の終了が行なわれる(ステップS18〜S20)。
本実施形態におけるクライアント端末20及びサーバ端末30の間では、上述の如くリクエスト及びレスポンスの処理が行なわれる。
次に、図7を参照しながら、スレッド42−1〜42−3の処理について、スレッド42−1が起動されてからスレッド42−3が破棄されるまでの過程(図6のステップS8′〜S16)をより詳細に説明する。
図7は、クライアントプログラム40′における、クライアント処理を行なうスレッド42−1,受信待ちループ処理を行なうスレッド42−2(受信待ちループ処理スレッド44)及びレスポンス処理を行なうスレッド42−3の処理を説明するためのフローチャートである。
この図7に示す手順では、図4に示すステップT3及びT7に替えて、ステップT3′及びT7−1が実行されるとともに、新たにステップT7−2が実行される。。
なお、図中、既述の符号と同一の符号が付されたステップは、同一もしくは略同一のステップを示しているので、その説明の一部を省略する。
以下、スレッド42−1により受信開始が指示された受信待ちループ処理スレッド44において、レスポンスの送信開始を意味するデータが待ち受けられている場合について説明する。
スレッド42−1では、受信待ちループ処理スレッド44′に対して受信開始が指示されると、スレッド42−1によって、サーバプログラム50′に対して任意のリクエストが送信される(ステップT3′)。
このとき、スレッド42−1により、レスポンス処理を持つオブジェクト43−2を生成する生成関数46の関数ポインタ47がリクエストに付加されて送信されるとともに、クライアントプログラム40′に対してリクエストを送信したことが通知される。
そして、スレッド42−1がスレッドプール41に返却されるとともに、オブジェクト43−1が破棄される(ステップT4,T5)。
これにより、クライアント処理を実行するスレッド42−1が終了される。
一方、受信待ちループ処理スレッド44において、サーバプログラム50′からレスポンス送信開始を意味するデータを受信した場合は(ステップT6のNoルート)、スレッド44′で実行されるレスポンス受信処理によって、サーバプログラム50′から送信されたレスポンスが受信される。このとき、スレッド44によって、レスポンスに付加されたレスポンス処理を持つオブジェクト43−2を生成する生成関数46の関数ポインタ47が取得される(ステップT7−1)。
そして、スレッド44′によって、取得した関数ポインタ47から生成関数46が呼び出され、レスポンス処理を持つオブジェクト43−2が生成される。(ステップT7−2)。
以下、クライアントプログラム40′は、上述したステップT8以降の手順により、生成関数46により生成したオブジェクト43−2をスレッド42−3に関連付けて、レスポンス処理を実行する。
本変形例においては、上述の手順により、クライアント・サーバ間通信が行なわれる。
このように、本実施形態の一例としての管理部21−1及び処理部21−2によれば、上述した第1実施形態と同様の効果が得られる。
また、処理部21−2によって、レスポンス処理(第2の処理)を持つオブジェクト43−2を生成する生成関数46の関数ポインタ47が、リクエストに付加されてサーバプログラム50′に送信される。そして、関数ポインタ47を含むレスポンスを受信後に、処理部21−2によって、関数ポインタ47から生成関数46が呼び出され、レスポンス処理を持つオブジェクト43−2が生成される。
これにより、処理部21−2において、リクエストを送信してからレスポンスを受信するまでの間は、レスポンス処理を持つオブジェクト43−2を生成せず、記憶部22の記憶領域が使用されないため、記憶領域の有効活用を図ることができる。
(C)その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、かかる特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
例えば、図1〜図7を参照しながら、クライアント・サーバ方式の通信において、クライアント端末20,20′がそなえる管理部21−1及び処理部21−2における処理について説明したが、これに限られない。
例えば、処理部21−2は、自身の端末内のCPUが実行する他のスレッド又は他のプログラムに対してリクエストを送信してもよい。この場合、他のスレッド又は他のプログラムは、処理部21−2から受信したリクエストに対するレスポンスを、処理部21−2に対して送信する。
このように、管理部21−1及び処理部21−2は、クライアント・サーバ方式の通信にのみ用いられるものではなく、自身の端末内のCPUが実行する他のスレッド又は他のプログラムとの通信においても用いることができる。
そして、クライアント端末20,20′のCPU21が、マルチスレッドプログラムを実行することにより、これらの管理部21−1及び処理部21−2として機能するようになっている。
なお、これらの管理部21−1及び処理部21−2としての機能を実現するためのプログラム(マルチスレッドプログラム)は、例えばフレキシブルディスク,CD(CD−ROM,CD−R,CD−RW等),DVD(DVD−ROM,DVD−RAM,DVD−R,DVD+R,DVD−RW,DVD+RW,HD DVD等),ブルーレイディスク,磁気ディスク,光ディスク,光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。また、そのプログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、その記憶装置から通信回線を介してコンピュータに提供するようにしても良い。
管理部21−1及び処理部21−2としての機能を実現する際には、内部記憶装置(本実施形態ではクライアント端末20,20′の記憶部22)に格納されたプログラムがコンピュータのマイクロプロセッサ(本実施形態ではクライアント端末20,20′のCPU21)によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしても良い。
なお、本実施形態において、コンピュータとは、ハードウェアとオペレーティングシステムとを含む概念であり、オペレーティングシステムの制御の下で動作するハードウェアを意味している。また、オペレーティングシステムが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウェアは、少なくとも、CPU等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取るための手段とをそなえており、本実施形態においては、クライアント端末20,20′がコンピュータとしての機能を有しているのである。
(D)付記
以上の実施形態及び変形例に関し、更に以下の付記を開示する。
(付記1)
複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部と、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部と、をそなえ、
該管理部は、
該処理部によって、該複数の処理のうちの第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
該処理部によって、該リクエストに対するレスポンスが受信されると、該複数の処理のうちの該レスポンスに関する処理を実行する第2の処理に対して空スレッドを割り当てることを特徴とする、マルチスレッド処理装置。
(付記2)
該処理部は、該第2の処理を識別するための識別情報を付加して、該リクエストを送信し、
該管理部は、該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが、該処理部によって受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当てることを特徴とする、付記1記載のマルチスレッド処理装置。
(付記3)
該識別情報は、該第2の処理を持つオブジェクトの先頭アドレスであることを特徴とする、付記2記載のマルチスレッド処理装置。
(付記4)
該識別情報は、該第2の処理を持つオブジェクトを生成する関数の関数ポインタであることを特徴とする、付記2記載のマルチスレッド処理装置。
(付記5)
該管理部は、該複数のスレッドを予め生成し管理するスレッドプールをそなえることを特徴とする、付記1〜4のいずれか1項記載のマルチスレッド処理装置。
(付記6)
該処理部が、該リクエストを送信する前に、
該管理部は、受信待ちスレッドとして、該リクエストに対する該レスポンスを受信する処理を該空スレッドに割り当てるとともに、
該処理部は、該受信待ちスレッドにより該レスポンスを受信する処理を開始することを特徴とする、付記1〜5のいずれか1項記載のマルチスレッド処理装置。
(付記7)
該処理部及び該管理部は、CPUにそなえられ、
該処理部は、該CPUが実行する他のスレッド又は他のプログラムに対して該リクエストを送信し、
該他のスレッド又は他のプログラムは、該処理部から受信した該リクエストに対する該レスポンスを、該処理部に対して送信することを特徴とする、付記1〜6のいずれか1項記載のマルチスレッド処理装置。
(付記8)
付記1〜6のいずれか1項記載のマルチスレッド処理装置と、該マルチスレッド処理装置と相互に通信可能に接続された他の装置と、をそなえるマルチスレッド処理システムであって、
該処理部は、該他の装置に対して該リクエストを送信し、
該他の装置は、該処理部から受信した該リクエストに対する該レスポンスを、該マルチスレッド処理装置に対して送信することを特徴とする、マルチスレッド処理システム。
(付記9)
複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部、および、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部、として、コンピュータを機能させるマルチスレッド処理プログラムであって、
該管理部は、
該処理部によって、該複数の処理のうちの第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
該処理部によって、該リクエストに対するレスポンスが受信されると、該複数の処理のうちの該レスポンスに関する処理を実行する第2の処理に対して空スレッドを割り当てるように、
該コンピュータを機能させることを特徴とする、マルチスレッド処理プログラム。
(付記10)
該処理部は、該第2の処理を識別するための識別情報を付加して、該リクエストを送信し、
該管理部は、該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが、該処理部によって受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当てるように、
該コンピュータを機能させることを特徴とする、付記9記載のマルチスレッド処理プログラム。
(付記11)
該識別情報は、該第2の処理を持つオブジェクトの先頭アドレスであることを特徴とする、付記10記載のマルチスレッド処理プログラム。
(付記12)
該識別情報は、該第2の処理を持つオブジェクトを生成する関数の関数ポインタであることを特徴とする、付記10記載のマルチスレッド処理プログラム。
(付記13)
該管理部は、該複数のスレッドを予め生成し管理するスレッドプールをそなえることを特徴とする、付記9〜12のいずれか1項記載のマルチスレッド処理プログラム。
(付記14)
該処理部が、該リクエストを送信する前に、
該管理部は、受信待ちスレッドとして、該リクエストに対する該レスポンスを受信する処理を該空スレッドに割り当てるとともに、
該処理部は、該受信待ちスレッドにより該レスポンスを受信する処理を開始するように、
該コンピュータを機能させることを特徴とする、付記9〜13のいずれか1項記載のマルチスレッド処理プログラム。
(付記15)
複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てて、該空スレッドが割り当てられた該一の処理を実行するマルチスレッド処理方法であって、
該複数の処理のうちの第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
該リクエストに対するレスポンスが受信されると、該複数の処理のうちの該レスポンスに関する処理を実行する第2の処理に対して空スレッドを割り当てることを特徴とする、マルチスレッド処理方法。
10,100 クライアント・サーバ間通信システム
20,200 クライアント端末
21,210,31,310 CPU
21−1,31−1 管理部
21−2,31−2 処理部
22,220,32,320 記憶部
23,230,33,330 送受信部
25,250 ネットワーク
30,300 サーバ端末
40,400 クライアントプログラム
41,410 スレッドプール
42−1〜42−3,420−1〜420−3 スレッド
43−1,43−2,430 オブジェクト
44,440 受信待ちループ処理スレッド
45 先頭アドレス
46 オブジェクト生成関数
47 関数ポインタ
50,500 サーバプログラム
54,540 サーバプログラム側スレッド

Claims (7)

  1. 複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部と、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部と、をそなえ、
    該処理部は、
    該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、
    該管理部は、
    該処理部によって、該第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
    該処理部によって、該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当て
    該識別情報は、該第2の処理を実行するオブジェクトを生成する関数の関数ポインタであることを特徴とする、マルチスレッド処理装置。
  2. 複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部と、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部と、をそなえ、
    該処理部は、
    該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、
    該管理部は、
    該処理部によって、該第1の処理から該リクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
    該処理部によって、該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当て、
    該識別情報は、該第2の処理を実行するオブジェクトの先頭アドレスであることを特徴とする、マルチスレッド処理装置。
  3. 記憶部をさらにそなえ、
    該管理部は、
    複数のオブジェクトのうちの第1及び第2のオブジェクトを該記憶部にそれぞれ生成し、生成した該第1及び第2のオブジェクトの少なくとも一のオブジェクトに対して複数のスレッドのうちの空スレッドを割り当て、
    該処理部は、
    該管理部によって該空スレッドが割り当てられた該第1又は第2のオブジェクトに含まれる処理を実行し、
    該管理部は、
    生成した該第1のオブジェクトに対して空スレッドを割り当て、
    該処理部によって、該第1のオブジェクトで実行される該第1の処理からリクエストが送信された場合に、該第1のオブジェクトに割り当てられたスレッドを解放して空スレッドにするとともに、該第1のオブジェクトを該記憶部から削除し、
    該処理部によって、該リクエストに対するレスポンスが受信されると、該第2の処理を実行する該第2のオブジェクトに対して空スレッドを割り当てることを特徴とする、請求項1又は請求項2記載のマルチスレッド処理装置。
  4. 該処理部が、該リクエストを送信する前に、
    該管理部は、受信待ちスレッドとして、該リクエストに対する該レスポンスを受信する処理を該空スレッドに割り当てるとともに、
    該処理部は、該受信待ちスレッドにより該レスポンスを受信する処理を開始することを特徴とする、請求項1〜のいずれか1項記載のマルチスレッド処理装置。
  5. 請求項1〜のいずれか1項記載のマルチスレッド処理装置と、該マルチスレッド処理装置と相互に通信可能に接続された他の装置と、をそなえるマルチスレッド処理システムであって、
    該処理部は、該他の装置に対して該リクエストを送信し、
    該他の装置は、該処理部から受信した該リクエストに対する該レスポンスを、該マルチスレッド処理装置に対して送信することを特徴とする、マルチスレッド処理システム。
  6. 複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てる管理部、および、該管理部によって該空スレッドが割り当てられた該一の処理を実行する処理部、として、コンピュータを機能させるマルチスレッド処理プログラムであって、
    該処理部は、
    該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、
    該管理部は、
    該処理部によって、該第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
    該処理部によって、該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該処理部が受信した該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当てるように、
    該コンピュータを機能させ
    該識別情報は、該第2の処理を実行するオブジェクトを生成する関数の関数ポインタであることを特徴とする、マルチスレッド処理プログラム。
  7. 複数の処理のうちの少なくとも一の処理に対して複数のスレッドのうちの空スレッドを割り当てて、該空スレッドが割り当てられた該一の処理を実行するマルチスレッド処理方法であって、
    該複数の処理のうちの第1の処理から、該複数の処理のうちのレスポンスに関する処理を実行する第2の処理を識別するための識別情報を付加したリクエストを送信し、
    該第1の処理からリクエストが送信された場合に、該第1の処理に割り当てられたスレッドを解放して空スレッドにするとともに、該第1の処理を終了させ、
    該リクエストに対するレスポンスであって該リクエストに付加された該識別情報を該リクエストの送信先により付加された該レスポンスが受信されると、該レスポンスに付加された該識別情報に基づいて、該第2の処理に対して空スレッドを割り当て
    該識別情報は、該第2の処理を実行するオブジェクトを生成する関数の関数ポインタであることを特徴とする、マルチスレッド処理方法。
JP2012524359A 2010-07-13 2010-07-13 マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法 Expired - Fee Related JP5408353B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/061825 WO2012008016A1 (ja) 2010-07-13 2010-07-13 マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法

Publications (2)

Publication Number Publication Date
JPWO2012008016A1 JPWO2012008016A1 (ja) 2013-09-05
JP5408353B2 true JP5408353B2 (ja) 2014-02-05

Family

ID=45469041

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012524359A Expired - Fee Related JP5408353B2 (ja) 2010-07-13 2010-07-13 マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法

Country Status (4)

Country Link
US (1) US20130132970A1 (ja)
EP (1) EP2595058A4 (ja)
JP (1) JP5408353B2 (ja)
WO (1) WO2012008016A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8689237B2 (en) 2011-09-22 2014-04-01 Oracle International Corporation Multi-lane concurrent bag for facilitating inter-thread communication
US10095562B2 (en) * 2013-02-28 2018-10-09 Oracle International Corporation System and method for transforming a queue from non-blocking to blocking
US9378045B2 (en) 2013-02-28 2016-06-28 Oracle International Corporation System and method for supporting cooperative concurrency in a middleware machine environment
US9110715B2 (en) 2013-02-28 2015-08-18 Oracle International Corporation System and method for using a sequencer in a concurrent priority queue
JP5920125B2 (ja) * 2012-09-05 2016-05-18 富士通株式会社 プロセス数制御プログラム、プロセス数制御方法、および情報処理装置
WO2017024965A1 (zh) * 2015-08-11 2017-02-16 阿里巴巴集团控股有限公司 一种数据流量限制的方法及系统
CN109669780B (zh) * 2018-12-25 2020-02-14 上海极链网络科技有限公司 一种视频解析方法及系统
CN110008012A (zh) * 2019-03-12 2019-07-12 平安普惠企业管理有限公司 一种信号量许可的调整方法及装置
CN110134578B (zh) * 2019-05-23 2023-04-28 浙江齐治科技股份有限公司 一种数据处理方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09282189A (ja) * 1996-04-09 1997-10-31 Hitachi Ltd サーバプログラム
JPH11149449A (ja) * 1997-11-18 1999-06-02 Nec Corp データベースセッション管理方法及びその装置と処理を記録した記録媒体
JPH11510632A (ja) * 1996-05-24 1999-09-14 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ・ネットワークにおいて通信リンクを提供する方法
JP2002505471A (ja) * 1998-02-26 2002-02-19 サンマイクロシステムズ インコーポレーテッド 遠隔処理の中断および継続の方法と装置
JP2006185229A (ja) * 2004-12-28 2006-07-13 Hitachi Ltd オンライン同期処理方法及び装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7380039B2 (en) * 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US8429655B2 (en) * 2005-04-29 2013-04-23 Microsoft Corporation System and method for asynchronous processing in page lifecycle
US8468541B2 (en) * 2007-08-28 2013-06-18 Red Hat, Inc. Event driven sendfile
WO2009033248A1 (en) * 2007-09-10 2009-03-19 Novell, Inc. A method for efficient thread usage for hierarchically structured tasks
US8087022B2 (en) * 2007-11-27 2011-12-27 International Business Machines Corporation Prevention of deadlock in a distributed computing environment
US20110161961A1 (en) * 2009-12-29 2011-06-30 Nokia Corporation Method and apparatus for optimized information transmission using dedicated threads
US8464269B2 (en) * 2010-12-16 2013-06-11 International Business Machines Corporation Handling and reporting of object state transitions on a multiprocess architecture
US9720708B2 (en) * 2011-08-19 2017-08-01 Advanced Micro Devices, Inc. Data layout transformation for workload distribution

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09282189A (ja) * 1996-04-09 1997-10-31 Hitachi Ltd サーバプログラム
JPH11510632A (ja) * 1996-05-24 1999-09-14 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ・ネットワークにおいて通信リンクを提供する方法
JPH11149449A (ja) * 1997-11-18 1999-06-02 Nec Corp データベースセッション管理方法及びその装置と処理を記録した記録媒体
JP2002505471A (ja) * 1998-02-26 2002-02-19 サンマイクロシステムズ インコーポレーテッド 遠隔処理の中断および継続の方法と装置
JP2006185229A (ja) * 2004-12-28 2006-07-13 Hitachi Ltd オンライン同期処理方法及び装置

Also Published As

Publication number Publication date
WO2012008016A1 (ja) 2012-01-19
JPWO2012008016A1 (ja) 2013-09-05
EP2595058A1 (en) 2013-05-22
EP2595058A4 (en) 2014-03-12
US20130132970A1 (en) 2013-05-23

Similar Documents

Publication Publication Date Title
JP5408353B2 (ja) マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法
TWI752994B (zh) 應用的擴容方法、裝置和系統
US8789043B2 (en) Optimized placement planning for virtual machines in a network by breaking relocation graph into one or more cores to apply different solutions
WO2018149263A1 (zh) 一种网络业务实例化的方法及装置
WO2017113688A1 (zh) 一种资源分配方法及装置
JP2015144020A5 (ja)
TW201731253A (zh) 量子金鑰分發方法及裝置
WO2012066640A1 (ja) 計算機システム、マイグレーション方法及び管理サーバ
WO2016145904A1 (zh) 一种资源管理方法、装置和系统
JP2007122664A (ja) 情報処理方法および情報処理装置
WO2018196462A1 (zh) 资源调度装置、资源调度系统和资源调度方法
JP4407956B2 (ja) 情報処理方法および情報処理装置
JP2002505471A (ja) 遠隔処理の中断および継続の方法と装置
WO2020057438A1 (zh) 云计算服务中的软件调试的方法和装置
JP2007226800A (ja) 多重ジャバアプリケーション環境で仮想idを用いて資源を管理する装置およびその方法
KR101644958B1 (ko) 다중 사용자 맞춤형 컴퓨팅 자원 제공을 위한 클러스터 구축 방법 및 클러스터 구축 장치
CN105677481B (zh) 一种数据处理方法、系统及电子设备
JP2009238103A (ja) エージェントを実行する装置及び方法
CN117724852B (zh) 一种云电脑计算资源分配方法及装置
WO2016206519A1 (zh) 分配ip地址的方法及装置
WO2019109948A1 (zh) PaaS的管理方法、装置及存储介质
JP2020053079A (ja) コンテンツ・デプロイメント、スケーリングおよびテレメトリ
WO2023035664A1 (zh) 资源分配方法、云主机、计算机可读存储介质
WO2015184902A1 (zh) 一种智能分屏的并发处理方法及相应的智能终端
JP2005352689A (ja) 対話型サービス配置方法、対話型サービス配置プログラムおよびその記録媒体、ならびに、サービスブローカ装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130709

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130909

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131008

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131021

LAPS Cancellation because of no payment of annual fees