Mercurial > hg > Members > anatofuz > slides
changeset 3:9175e77652b3
add 20170123 slides
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 23 Jan 2018 19:26:41 +0900 |
parents | 1d0f0dcfda28 |
children | 03ab44e80533 |
files | .hgignore slides/20170123/slide.md |
diffstat | 2 files changed, 89 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Tue Jan 16 21:00:07 2018 +0900 +++ b/.hgignore Tue Jan 23 19:26:41 2018 +0900 @@ -21,4 +21,4 @@ themes/**/*.ttf themes/**/*.otf themes/**/*.woff -utils/local +Utils/local
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slides/20170123/slide.md Tue Jan 23 19:26:41 2018 +0900 @@ -0,0 +1,88 @@ +title: 分散フレームワークakkaの調査 +author: Takahiro Shimizu +profile: +lang: Japanese + + +# 調査目的 +* 先輩の修論の比較材料の為に行う +* 分散フレームワークの1つであるakkaがどのような書き方、及び処理なのかを調査する + + +# 今週の進捗 +* scalaの入門書を斜め読みした +* akkaの公式チュートリアルを行った +* Graphでn入力1出力のアクターモデルが生成出来ることを調べた + * ドキュメントの例題を実行した + +# 調査内容 +* akkaのmac osx,ubuntu上の導入 +* [公式チュートリアル](https://developer.lightbend.com/guides/akka-quickstart-java/)の例題を行う +* 前回はJavaで実行した + * scalaで今回再調査を行いました + +# scala環境の構築 +* brewやaptで導入した +* scalaという名前のパッケージもあるが、sbtで導入する + * `~/.sbt` 以下のディレクトリにバージョンごと入る為、適切に処理しないと競合する + +# akkaでn入力の処理 +* [GraphDSL](https://doc.akka.io/docs/akka/current/stream/stream-graphs.html?language=scala#constructing-graphs)系の命令を利用すると実行可能 +* [Github上の別のサンプル](https://github.com/pkinsky/akka-streams-example) + +# 出力系 +* Broadcast[T] + * (1input N output) 1入力に対して全てのoutputに渡す +* Balance[T] + * (1input N outputs) outputを1つ指定して出力をする +* unzipWith[In,A,B..] + * 関数を受取,20までの各要素に対して実行する +* unZip[A,B] + * Tupleを分割して、2つのoutputに対して送る + +# input系 +* Merge[In] +* MergePreferred[In] +* MergePrioritized[In] +* ZipWith[A,B,...,Out] +* Zip[A,B] +* Concat[A] + +# チュートリアル + +```scala +package merger + +import akka.NotUsed +import akka.actor.ActorSystem +import akka.routing.Broadcast +import akka.stream.{ClosedShape, OverflowStrategy} +import akka.stream.scaladsl.{Flow, GraphDSL, Merge, RunnableGraph, Sink, Source} + + +object merger extends App { + val system: ActorSystem = ActorSystem("mergeAkka") + + val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit builder: GraphDSL.Builder[NotUsed] => + import GraphDSL.Implicits._ + val in = Source(1 to 10) + val out = Sink.ignore + + val bcast = builder.add(Broadcast[Int](2)) + val merge = builder.add(Merge[Int](2)) + + val f1, f2, f3, f4 = Flow[Int].map(_ + 10) + + in ~> f1 ~> bcast ~> f2 ~> merge ~> f3 ~> out + bcast ~> f4 ~> merge + ClosedShape + }) + +} + +``` + +# 詰まっている所 + +* 公式のサンプルコードを動かそうとすると型エラーが発生する +* コンパニオンオブジェクトの書き方があまり理解できていない