Quasar: Actor Model and Light Weight Threads on Java
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Quasar: Actor Model and Light Weight Threads on Java

on

  • 1,462 views

 

Statistics

Views

Total Views
1,462
Views on SlideShare
510
Embed Views
952

Actions

Likes
1
Downloads
2
Comments
0

6 Embeds 952

http://kikutaro777.hatenablog.com 851
http://pec-local.swe.nec.co.jp 64
https://twitter.com 27
http://feedly.com 7
http://fl.ssig33.com 2
https://reader.aol.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Quasar: Actor Model and Light Weight Threads on Java Presentation Transcript

  • 1. Quasar: Java のアクター/軽量スレッド 宮川 拓 / @miyakawa_taku 2014-08-22 JJUG LT大会
  • 2. 自己紹介 •宮川拓です •Kink という JVM 言語を作ってます –https://bitbucket.org/kink/kink •大相撲秋場所に向けて準備中です 1
  • 3. Quasar? •Erlang 的なアクターモデルを実現する Java ライブラリ 2
  • 4. アクターモデル •アクター(スレッド的なもの)同士がメッセージ を互いに投げ合って協調動作する計算モデル •オブジェクトを作る感覚でアクターを作る •つまり湯水のごとくスレッドを作る 3
  • 5. Scala のアクターと何が違うの? •Scala のアクター –ネイティブスレッドで実現されている •Quasar のアクター –軽量スレッドで実現されている 4
  • 6. 軽量スレッド? •軽量スレッド ::= –ユーザランド(カーネル外)で実現するスレッド –Go の goroutine, Erlang の「プロセス」など –Quasar では「Fiber」と呼ぶ •利点 –100万とか1,000万とかの数が作れる –ブロックが多発する状況では性能で有利 5
  • 7. 実現方法 •バイトコード操作でコンテキストスイッチ用の コードを仕込む –クラスロード時(-javaagent) or コンパイル時 6
  • 8. 実行時の動作 1.実行している命令の位置 2.ローカル変数のセット を自前のスタックに保存しながら実行する (ようにバイトコードを改変する) 7 class SenderFiber extends Fiber { public Void run() throws ... { int num = 42; channel.send(num); num = 24; channel.send(num); bye(); } } data=24
  • 9. 制御が離れる時の動作 •ブロック/yieldするメソッドが SuspendExecution例外を投げる •呼び出し元がキャッチして他の軽量スレッドに 制御を渡す 8 class SenderFiber extends Fiber { public Void run() throws ... { int num = 42; channel.send(num); num = 24; channel.send(num); bye(); } } SuspendExecution
  • 10. 制御が戻ってくる時の動作 •もう一度同じメソッドを呼び出す •メソッドの先頭で自前スタックから実行位置と ローカル変数を回復 •switch & ジャンプ 9 class SenderFiber extends Fiber { public Void run() throws ... { int num = 42; channel.send(num); num = 24; channel.send(num); bye(); } } ローカル変数回復 switch & ジャンプ