論文紹介 jcc:Timed Default cc Programming in JAVA 若槻聡一郎 Javaにおける並行プログラミング スレッド、共有ヒープ、分割スタック 共有ヒープ内の可変オブジェクトのロックに基 づく同期 スレッド特有のデータ構造(ヒープキャッシュ、 スタック)と共有ストア間の情報の流れを組織 するためのルール Javaにおける並行プログラミング 不幸なことに現在の仕様は理解するのが困 難でしばしば意図しない関わりがある…現存 する仕様の中ではいくつかの大切な点に関し て議論されていない Javaにおける並行プログラミング Javaでは実行が並行に行われるのはデフォ ルトである Javaコードの全ての行は同一オブジェクト内 のマルチスレッドによって並列に実行される Jccのモデル jcc= JAVA −Threads +Vats +Promises +Agents Jccの設計目標 • • • • Javaとの相互運用性:ソースコード、Java仮 想マシン、型体系 新たな制約システムを付加するための、プ ログラマ用のAPI メタプログラミングの反映の提供 実装は中くらいのサイズのプログラムへの 使用に適しているべきである 残りの話 銀行のアプリケーションの例 Jccの設計の要素 銀行のアプリケーション 引き出し 預金 銀行のアプリケーション:引き出し 残高が十分にある場合には引き出しが成功 する もし残高が十分でない場合には、n回の預金 のあとに引き出しを繰り返す。もし残高がまだ 十分でなければ、引き出しは拒否される。 The bank application Account1 (zero) Withdrawal Ravi suspend Deposit(100) suspend Account2 The bank application 25 Account1 (25) Withdrawal Ravi suspend Deposits Deposit(100) suspend Account2 The bank application 25 each Account1 (100) Withdrawal Ravi Deposits Deposit(100) Account2 Rest of the talk An example Bank application The design elements of Jcc. Vats and ports Ports Local stack/heap Stack Single threaded Heap JVM = Multiple vats + Shared heap of immutable objects Communication: Ports 各々のportはvatにおかれそのvatによっての に読み出されるEach port is located at a vat and is “read” only by code at that vat 各々のportは他のvatに複数のwriterとteller を持つことができる Portに書き込まれたオブジェクトは元のvatか ら対象のvatにコピーされる Vats and ports in the bank application Account1 (zero) Withdrawal Ravi suspend Deposit(100) suspend Account2 Vatにおける実行 他のメッセージを受け取る前にそのときのメッセ ージの処理を終える: ・新たなローカルヒープオブジェクトを作る ・ヒープ内のメソッドを呼び出す ・他のvat内のportにオブジェクトを送る これらの命令はすべてブロックされない 制限された応答は保証される? 論理的時間 A logical time-step: receive input compute response 束縛された応答が保証されうる状況下では物 理的時間に相当する cf. Esterel. Logical time in the bank application Account1 (zero) Withdrawal Time steps: 0. Withdrawal(100) 1. Deposit(25) 2. Deposit(25) 3. Deposit(25) 4. Deposit(25) Time based control constructs 1) next {S}. Sがストアに入れられ、次の時間 における実行がなされる 2) always {S}: 全ての時間でSを実行する Oops! 同じ時間にたくさんのプログラムが実行 されうるではないか! Mutiple programs in the Account1 vat of the bank application Account1 (zero) Withdrawal Time steps: 0. Withdrawal(100): “withdrawal code” 1. Deposit(25): “withdrawal, deposit code” 2. Deposit(25): “withdrawal, deposit code” 3. Deposit(25): as above 4. Deposit(25): as above Vat間の通信用の制約Constraints for Intra-Vat communication 決定の並行の達成方法は? 並行制約プログラミングだ! How to achieve determinate concurrency? Concurrent constraint programming! Store Jccにおける制約ストア 各々のvatは個々に制約ストアをもつ ストア内にある全てのアイテムはその時間の 終わりまでに実行される:プログラマはnextを 明示して使用してアイテムを次の時間に運ぶ JccにおけるPromise(=型付けされた論理変 数)用の制約 Promises Jccのpromise = Javaのjava.lang.Object 次の4つの状態を持つ 1. Unrealized and unwatched. [new variables] 2. Realized [new constants] 3. Bound [o.equate(p) ] 4. Unrealized and watched Watchers for promises When (p) do S pがrealizedになったらSを実行する そうでなければp上でSの実行が一時停止さ れる。Sはpのためのwatcherである p.equate(q)の効果って?? Watchers for promises every (p) do S pがrealizedになった全ての時間でSを実行す る Code for Account public BankAccount() { every (balanceUpdate) { // check if pending withdrawals // can be satisfied } Code for Account public Confirmation deposit(Integer amount){ Confirmation result = new Confirmation(); when (amount) { // update balance result.equate(“Success”); } return result; } Code for Account public Confirmation withdraw(Integer amount){ Confirmation result = new Confirmation(); when (amount) { // check balance // if balance sufficient result.equate(“Success”); //if balance not sufficient, add to pending list } return result; } Conclusions jcc= JAVA −Threads +Vats +Promises +Agents Full power of Timed Default cc in Java.
© Copyright 2024 ExpyDoc