SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Scalaで並行プログラミング


          NetPenguin
自己紹介
• NetPenguin
  – http://d.hatena.ne.jp/NetPenguin/
  – http://twitter.com/NetPenguin/
• プログラマ(否SE)
• Java, Scala, C/C++, PHP, etc...
• Scala-be
  – http://groups.google.co.jp/group/scala-be

                                                2
目次
•   Scala
•   アクターモデル
•   Scalaのアクターライブラリ
•   まとめ




                      3
Scala
• オブジェクト指向+関数型
• JVM上で動作
• ScalaからJavaのライブラリを利用可能
 JavaからScalaのメソッドを呼び出すことも可能
• 変態豊富な言語機能
 – Implicit parameter, Implicit conversion,
   Trait, Structual typing, Pattern match
 – Partial Function, タプル, Immutableなリスト,
  etc...

                                              4
Scala
• その他
  – TwitterもScalaで動いているらしいです
  – マスコットキャラも出来たようです・・・




                               5
• 魔法少女 Scala ちゃん




  id:secondlife さんのところから拝借しました。
  ●http://subtech.g.hatena.ne.jp/secondlife/20090701/1246418689#   6
アクターモデル
• 全てのものはアクターである
 – OOの「すべてのものはオブジェクトである」
   と同じようなもの
• 基本的に非同期メッセージを使用
 – OOでは基本的に同期メッセージ
 – アクタ間のやり取りはメッセージのみ
• 状態は各アクターに閉じている


                       7
自然と並行に動作可能




             8
Scalaのアクターライブラリ
• 特徴
 – 言語の一部のように見える構文
 – パターンマッチ
 – スレッドを無駄使いしない
• やれること
 – アクターの生成/開始
 – メッセージ送信
 – メッセージ受信
 – メッセージ返信
                    9
アクターの生成/開始(1)
• Actorクラスを継承
   – Actorクラスを継承し、actメソッドを実装する
   – start メソッドを呼び出して、アクターを開始する

class SampleActor extends Actor {
  def act():Unit = {
    :
  }
}

object Sample {
  def main(args: Array[String]):Unit = {
    new SampleActor().start
  }
}                                          10
アクターの生成/開始(2)
• Actor.actor メソッドで生成
   – actor に続くブロックが act メソッドに相当
   – ただちに開始される(start不要)

import scala.actors.Actor.actor

object Sample {
  def main(args: Array[String]):Unit = {
    actor {
      :
      :
    }
  }
}
                                           11
メッセージ送信
• 任意のオブジェクトを送信可能
• !、!?、!!でメッセージ送信
     – ! → 一方通行
     – !? → 返信を待つ
     – !! → 返信受信時にコールバック
def main(args: Array[String]):Unit = {
  val sample = actor { ... }

    sample ! “message”     // 文字列を送信
    println(sample !? 1)   // 数値を送信、返信を出力
}

                                            12
メッセージ受信(1)
• receiveで受信
   – メッセージが届くまでスレッドを止めて待つ
     (メッセージ待ち中もスレッドを消費する)
   – reveiveの外側に値を返すことができる
actor {
  val result = receive {
    case t: String =>
      println(“receive text. text=”+t)
      “text” // result == “text” になる
    case 1 =>
      println(“receive number.”)
      “number” // result == “number” になる
  }
}
                                           13
メッセージ受信(2)
• reactで受信
   – メッセージ処理中のみスレッドを使用する
   – reactの外側に値を返すことはできない
actor {
  react {
    case t: String =>
      println(“receive text. text=”+t)
    case 1 =>
      println(“receive number.”)
  }
}

                                         14
メッセージ受信(その他)
• 受信を繰り返す
   – loopで囲う


actor {
  loop {
    react {
      case t: String =>
         println(“receive text. text=”+t)
      case 1 =>
         println(“receive number.)
    }
  }
}
                                            15
メッセージ返信
• reply で返信
   – 任意のオブジェクトを返信できる
   – !?, !! によるメッセージ送信側で受け取ることができる

actor {
  loop {
    react {
      case t: String =>
        reply “receive ”+t
      case 1 =>
        reply “receive 1st”
    }
  }
}
                                     16
試してみた
• クイックソート
  – 10,000個の整数をソート×100回
• すべてをアクターにしてみた
  – 分割(Separator)
  – 結合(Combaine)
• 大量にアクターを生成
  – 分割毎にアクタ生成

※ソースはhttp://svn.coderepos.org/share/lang/scala
 /sandbox/samples/actor/ に置いてあります             17
結果
• CPU使用率80~90%




        (Core2Quad 2.4GHz)
                             18
結果
• すべてをアクターにすると
 – メモリを大量消費
 – オーバーヘッドで遅かった(10倍くらい)
  • 通常のソート → 2~3秒
  • アクター使用 → 28秒




      _| ̄|○               19
まとめ
•   自然と並行処理になる
•   同期処理不要
•   CPUパワーを余すことなく使える
•   アクターの粒度はほどほどに




                       20
ご静聴、ありがとうございました。




                   21

Mais conteúdo relacionado

Mais procurados

Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行guest5f4320
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析mametter
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化Lintaro Ina
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
Scala による自然言語処理
Scala による自然言語処理Scala による自然言語処理
Scala による自然言語処理Hiroyoshi Komatsu
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門Makoto Fukuhara
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
Sns suite presentation
Sns suite presentationSns suite presentation
Sns suite presentationJason Namkung
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriYuta Okamoto
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるmametter
 

Mais procurados (20)

Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Scala による自然言語処理
Scala による自然言語処理Scala による自然言語処理
Scala による自然言語処理
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Sns suite presentation
Sns suite presentationSns suite presentation
Sns suite presentation
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
 

Destaque

MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・Net Penguin
 
OW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API frameworkOW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API frameworkOW2
 
Chapter 11
Chapter 11Chapter 11
Chapter 11dphil002
 
프로젝트N 기획문서
프로젝트N 기획문서프로젝트N 기획문서
프로젝트N 기획문서Matthew Chang
 
XWiki OW2 Conference Nov10
XWiki OW2 Conference Nov10XWiki OW2 Conference Nov10
XWiki OW2 Conference Nov10OW2
 
LinkedIn and Twitter Lab
LinkedIn and Twitter LabLinkedIn and Twitter Lab
LinkedIn and Twitter LabHelen Buzdugan
 
eGov 2.0 keys to success white paper June2009
eGov 2.0 keys to success white paper June2009eGov 2.0 keys to success white paper June2009
eGov 2.0 keys to success white paper June2009etienneveyret
 
Microsoft Power Point Facet5 Presentatie Linked In
Microsoft Power Point   Facet5 Presentatie Linked InMicrosoft Power Point   Facet5 Presentatie Linked In
Microsoft Power Point Facet5 Presentatie Linked InMichiel Castelijns
 
OW2con'14 - OW2 Big data initiative, SpagoBI Labs by Engineering
OW2con'14 - OW2 Big data initiative, SpagoBI Labs by EngineeringOW2con'14 - OW2 Big data initiative, SpagoBI Labs by Engineering
OW2con'14 - OW2 Big data initiative, SpagoBI Labs by EngineeringOW2
 
Ciszewski internet credentials and case study eng
Ciszewski internet credentials and case study engCiszewski internet credentials and case study eng
Ciszewski internet credentials and case study engCiszewski MSL
 
Cloud Computing Presentation V3
Cloud Computing Presentation V3Cloud Computing Presentation V3
Cloud Computing Presentation V3David Oliver
 
CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...
CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...
CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...OW2
 
Ow2 X Wiki Use Case Open World Forum09
Ow2 X Wiki Use Case Open World Forum09Ow2 X Wiki Use Case Open World Forum09
Ow2 X Wiki Use Case Open World Forum09OW2
 
Life Beautiful Monday
Life Beautiful MondayLife Beautiful Monday
Life Beautiful MondayPentiux
 
Solving Web Applications Challenges with Build Process and SOC
Solving Web Applications Challenges with Build Process and SOCSolving Web Applications Challenges with Build Process and SOC
Solving Web Applications Challenges with Build Process and SOCOW2
 
I.M Psmate Con Estas Fotos
I.M Psmate Con Estas FotosI.M Psmate Con Estas Fotos
I.M Psmate Con Estas Fotosalfcoltrane
 
10 steps to primary 1
10 steps to primary 110 steps to primary 1
10 steps to primary 1woan shya
 

Destaque (20)

MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・
 
Brita tester pol
Brita tester polBrita tester pol
Brita tester pol
 
OW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API frameworkOW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API framework
 
Chapter 11
Chapter 11Chapter 11
Chapter 11
 
프로젝트N 기획문서
프로젝트N 기획문서프로젝트N 기획문서
프로젝트N 기획문서
 
XWiki OW2 Conference Nov10
XWiki OW2 Conference Nov10XWiki OW2 Conference Nov10
XWiki OW2 Conference Nov10
 
LinkedIn and Twitter Lab
LinkedIn and Twitter LabLinkedIn and Twitter Lab
LinkedIn and Twitter Lab
 
eGov 2.0 keys to success white paper June2009
eGov 2.0 keys to success white paper June2009eGov 2.0 keys to success white paper June2009
eGov 2.0 keys to success white paper June2009
 
Microsoft Power Point Facet5 Presentatie Linked In
Microsoft Power Point   Facet5 Presentatie Linked InMicrosoft Power Point   Facet5 Presentatie Linked In
Microsoft Power Point Facet5 Presentatie Linked In
 
OW2con'14 - OW2 Big data initiative, SpagoBI Labs by Engineering
OW2con'14 - OW2 Big data initiative, SpagoBI Labs by EngineeringOW2con'14 - OW2 Big data initiative, SpagoBI Labs by Engineering
OW2con'14 - OW2 Big data initiative, SpagoBI Labs by Engineering
 
Ciszewski internet credentials and case study eng
Ciszewski internet credentials and case study engCiszewski internet credentials and case study eng
Ciszewski internet credentials and case study eng
 
Cloud Computing Presentation V3
Cloud Computing Presentation V3Cloud Computing Presentation V3
Cloud Computing Presentation V3
 
CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...
CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...
CHOReOS: "Large Scale Choreographies for the Future Internet", from theory to...
 
Ow2 X Wiki Use Case Open World Forum09
Ow2 X Wiki Use Case Open World Forum09Ow2 X Wiki Use Case Open World Forum09
Ow2 X Wiki Use Case Open World Forum09
 
Life Beautiful Monday
Life Beautiful MondayLife Beautiful Monday
Life Beautiful Monday
 
Star Animation I
Star Animation IStar Animation I
Star Animation I
 
Solving Web Applications Challenges with Build Process and SOC
Solving Web Applications Challenges with Build Process and SOCSolving Web Applications Challenges with Build Process and SOC
Solving Web Applications Challenges with Build Process and SOC
 
I.M Psmate Con Estas Fotos
I.M Psmate Con Estas FotosI.M Psmate Con Estas Fotos
I.M Psmate Con Estas Fotos
 
10 steps to primary 1
10 steps to primary 110 steps to primary 1
10 steps to primary 1
 
Holiday Sparkle For Jewelry Lovers
Holiday Sparkle For Jewelry LoversHoliday Sparkle For Jewelry Lovers
Holiday Sparkle For Jewelry Lovers
 

Semelhante a 197x 20090704 Scalaで並行プログラミング

SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてShibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてtnoda
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用Takuya Iwatsuka
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!bitter_fox
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Taku Miyakawa
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Shuya Tsukamoto
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskellaiya000
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 

Semelhante a 197x 20090704 Scalaで並行プログラミング (20)

ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
GParsの?Actor Model
GParsの?Actor ModelGParsの?Actor Model
GParsの?Actor Model
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてShibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R について
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Scala勉強会_2014_11_18
Scala勉強会_2014_11_18Scala勉強会_2014_11_18
Scala勉強会_2014_11_18
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
Vim scriptとJavaとHaskell
Vim scriptとJavaとHaskellVim scriptとJavaとHaskell
Vim scriptとJavaとHaskell
 
LDA入門
LDA入門LDA入門
LDA入門
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 

Último

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Último (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

197x 20090704 Scalaで並行プログラミング

  • 2. 自己紹介 • NetPenguin – http://d.hatena.ne.jp/NetPenguin/ – http://twitter.com/NetPenguin/ • プログラマ(否SE) • Java, Scala, C/C++, PHP, etc... • Scala-be – http://groups.google.co.jp/group/scala-be 2
  • 3. 目次 • Scala • アクターモデル • Scalaのアクターライブラリ • まとめ 3
  • 4. Scala • オブジェクト指向+関数型 • JVM上で動作 • ScalaからJavaのライブラリを利用可能 JavaからScalaのメソッドを呼び出すことも可能 • 変態豊富な言語機能 – Implicit parameter, Implicit conversion, Trait, Structual typing, Pattern match – Partial Function, タプル, Immutableなリスト, etc... 4
  • 5. Scala • その他 – TwitterもScalaで動いているらしいです – マスコットキャラも出来たようです・・・ 5
  • 6. • 魔法少女 Scala ちゃん id:secondlife さんのところから拝借しました。 ●http://subtech.g.hatena.ne.jp/secondlife/20090701/1246418689# 6
  • 7. アクターモデル • 全てのものはアクターである – OOの「すべてのものはオブジェクトである」 と同じようなもの • 基本的に非同期メッセージを使用 – OOでは基本的に同期メッセージ – アクタ間のやり取りはメッセージのみ • 状態は各アクターに閉じている 7
  • 9. Scalaのアクターライブラリ • 特徴 – 言語の一部のように見える構文 – パターンマッチ – スレッドを無駄使いしない • やれること – アクターの生成/開始 – メッセージ送信 – メッセージ受信 – メッセージ返信 9
  • 10. アクターの生成/開始(1) • Actorクラスを継承 – Actorクラスを継承し、actメソッドを実装する – start メソッドを呼び出して、アクターを開始する class SampleActor extends Actor { def act():Unit = { : } } object Sample { def main(args: Array[String]):Unit = { new SampleActor().start } } 10
  • 11. アクターの生成/開始(2) • Actor.actor メソッドで生成 – actor に続くブロックが act メソッドに相当 – ただちに開始される(start不要) import scala.actors.Actor.actor object Sample { def main(args: Array[String]):Unit = { actor { : : } } } 11
  • 12. メッセージ送信 • 任意のオブジェクトを送信可能 • !、!?、!!でメッセージ送信 – ! → 一方通行 – !? → 返信を待つ – !! → 返信受信時にコールバック def main(args: Array[String]):Unit = { val sample = actor { ... } sample ! “message” // 文字列を送信 println(sample !? 1) // 数値を送信、返信を出力 } 12
  • 13. メッセージ受信(1) • receiveで受信 – メッセージが届くまでスレッドを止めて待つ (メッセージ待ち中もスレッドを消費する) – reveiveの外側に値を返すことができる actor { val result = receive { case t: String => println(“receive text. text=”+t) “text” // result == “text” になる case 1 => println(“receive number.”) “number” // result == “number” になる } } 13
  • 14. メッセージ受信(2) • reactで受信 – メッセージ処理中のみスレッドを使用する – reactの外側に値を返すことはできない actor { react { case t: String => println(“receive text. text=”+t) case 1 => println(“receive number.”) } } 14
  • 15. メッセージ受信(その他) • 受信を繰り返す – loopで囲う actor { loop { react { case t: String => println(“receive text. text=”+t) case 1 => println(“receive number.) } } } 15
  • 16. メッセージ返信 • reply で返信 – 任意のオブジェクトを返信できる – !?, !! によるメッセージ送信側で受け取ることができる actor { loop { react { case t: String => reply “receive ”+t case 1 => reply “receive 1st” } } } 16
  • 17. 試してみた • クイックソート – 10,000個の整数をソート×100回 • すべてをアクターにしてみた – 分割(Separator) – 結合(Combaine) • 大量にアクターを生成 – 分割毎にアクタ生成 ※ソースはhttp://svn.coderepos.org/share/lang/scala  /sandbox/samples/actor/ に置いてあります 17
  • 18. 結果 • CPU使用率80~90% (Core2Quad 2.4GHz) 18
  • 19. 結果 • すべてをアクターにすると – メモリを大量消費 – オーバーヘッドで遅かった(10倍くらい) • 通常のソート → 2~3秒 • アクター使用 → 28秒 _| ̄|○ 19
  • 20. まとめ • 自然と並行処理になる • 同期処理不要 • CPUパワーを余すことなく使える • アクターの粒度はほどほどに 20