Mercurial > hg > Members > anatofuz > slides
comparison slides/20170123/slide.md @ 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 | |
children |
comparison
equal
deleted
inserted
replaced
2:1d0f0dcfda28 | 3:9175e77652b3 |
---|---|
1 title: 分散フレームワークakkaの調査 | |
2 author: Takahiro Shimizu | |
3 profile: | |
4 lang: Japanese | |
5 | |
6 | |
7 # 調査目的 | |
8 * 先輩の修論の比較材料の為に行う | |
9 * 分散フレームワークの1つであるakkaがどのような書き方、及び処理なのかを調査する | |
10 | |
11 | |
12 # 今週の進捗 | |
13 * scalaの入門書を斜め読みした | |
14 * akkaの公式チュートリアルを行った | |
15 * Graphでn入力1出力のアクターモデルが生成出来ることを調べた | |
16 * ドキュメントの例題を実行した | |
17 | |
18 # 調査内容 | |
19 * akkaのmac osx,ubuntu上の導入 | |
20 * [公式チュートリアル](https://developer.lightbend.com/guides/akka-quickstart-java/)の例題を行う | |
21 * 前回はJavaで実行した | |
22 * scalaで今回再調査を行いました | |
23 | |
24 # scala環境の構築 | |
25 * brewやaptで導入した | |
26 * scalaという名前のパッケージもあるが、sbtで導入する | |
27 * `~/.sbt` 以下のディレクトリにバージョンごと入る為、適切に処理しないと競合する | |
28 | |
29 # akkaでn入力の処理 | |
30 * [GraphDSL](https://doc.akka.io/docs/akka/current/stream/stream-graphs.html?language=scala#constructing-graphs)系の命令を利用すると実行可能 | |
31 * [Github上の別のサンプル](https://github.com/pkinsky/akka-streams-example) | |
32 | |
33 # 出力系 | |
34 * Broadcast[T] | |
35 * (1input N output) 1入力に対して全てのoutputに渡す | |
36 * Balance[T] | |
37 * (1input N outputs) outputを1つ指定して出力をする | |
38 * unzipWith[In,A,B..] | |
39 * 関数を受取,20までの各要素に対して実行する | |
40 * unZip[A,B] | |
41 * Tupleを分割して、2つのoutputに対して送る | |
42 | |
43 # input系 | |
44 * Merge[In] | |
45 * MergePreferred[In] | |
46 * MergePrioritized[In] | |
47 * ZipWith[A,B,...,Out] | |
48 * Zip[A,B] | |
49 * Concat[A] | |
50 | |
51 # チュートリアル | |
52 | |
53 ```scala | |
54 package merger | |
55 | |
56 import akka.NotUsed | |
57 import akka.actor.ActorSystem | |
58 import akka.routing.Broadcast | |
59 import akka.stream.{ClosedShape, OverflowStrategy} | |
60 import akka.stream.scaladsl.{Flow, GraphDSL, Merge, RunnableGraph, Sink, Source} | |
61 | |
62 | |
63 object merger extends App { | |
64 val system: ActorSystem = ActorSystem("mergeAkka") | |
65 | |
66 val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit builder: GraphDSL.Builder[NotUsed] => | |
67 import GraphDSL.Implicits._ | |
68 val in = Source(1 to 10) | |
69 val out = Sink.ignore | |
70 | |
71 val bcast = builder.add(Broadcast[Int](2)) | |
72 val merge = builder.add(Merge[Int](2)) | |
73 | |
74 val f1, f2, f3, f4 = Flow[Int].map(_ + 10) | |
75 | |
76 in ~> f1 ~> bcast ~> f2 ~> merge ~> f3 ~> out | |
77 bcast ~> f4 ~> merge | |
78 ClosedShape | |
79 }) | |
80 | |
81 } | |
82 | |
83 ``` | |
84 | |
85 # 詰まっている所 | |
86 | |
87 * 公式のサンプルコードを動かそうとすると型エラーが発生する | |
88 * コンパニオンオブジェクトの書き方があまり理解できていない |