Slide 1

Slide 1 text

Goでパイプライン
 Fukuoka.go #17
 2021.06.10
 清家 史郎
 1


Slide 2

Slide 2 text

自己紹介
 清家 史郎
 seike460
 - ID
 - Github:seike460
 - Twitter:@seike460
 - Work at
 - 株式会社 Fusic (フュージック) 
 技術開発本部/技術開発第一部門 
 ■ エバンジェリスト
 ■ チームリーダー
 ■ プリンシパルエンジニア
 - Skill
 - PHP
 - Go
 - AWS
 2


Slide 3

Slide 3 text

パイプライン

Slide 4

Slide 4 text

パイプライン
 パイプライン
 データストリームやバッチ処理を行う際等に、 
 データを受け取って何らかの処理を行って、どこかに渡す一連の作業 
 
 これらの操作をパイプラインのステージと呼びます。
 
 ステージには以下の性質があります。 
 
 - 前段ステージの戻り値の型と
 後段ステージの入力の型が一致している 
 - 引き回せる様に具体化されている 
 (Goは関数の形で具体化されている) 
 
 4


Slide 5

Slide 5 text

kat-co/concurrency-in-go-src Goでパイプラインを作るぞ!


Slide 6

Slide 6 text

パイプライン処理の例
 6
 fig-functional-pipeline-combination.go 
 
 int sliceと intを引数に
 int sliceを戻り値に取る関数 
 


Slide 7

Slide 7 text

ステージの追加例
 7
 fig-adding-additional-stage-to-pipeline.go
 
 int sliceと intを引数に
 int sliceを戻り値に取る関数 
 


Slide 8

Slide 8 text

パイプラインの利点
 ステージ自体を変更する事なく、簡単にステージを組み合わせる事が出来る 
 
 パイプラインの利点を理解したところで、Goならではのパイプラインを考えます。 
 
 チャネルを利用して、パイプラインを構築することで、 
 並列処理をパイプラインにて処理する事が出来るようになります。 
 8


Slide 9

Slide 9 text

チャネルを利用したパイプライン処理
 9
 fig-pipelines-chan-stream-processing.go 
 
 generatorで可変長引数のint slice 
 整数バッファ付きチャネルを作成し 
 作成したチャネルを返す 


Slide 10

Slide 10 text

数字ストリームを受けた multiply
 10
 
 数字ストリームを受け、 
 2倍したチャネルを返す 


Slide 11

Slide 11 text

数字ストリームを受けた add
 11
 
 数字のストリームを受け、 
 引数の整数を足したチャネルを返す 


Slide 12

Slide 12 text

パイプラインを利用した例 (ストリーム型)
 12
 fig-pipelines-func-stream-processing.go
 
 各ステージでは前段の戻り値と 
 後段の入力値が一致しており、 
 安全に並列処理が行える 
 パイプラインが構築出来る 


Slide 13

Slide 13 text

まとめ
 Point 3
 「Go言語による並行処理」はいい本なのでぜひ読みましょう 
 13
 ステージを介する事で簡単にパイプラインを構築する事が出来る
 Point 1
 
 Goのチャネルをつかうと、パイプラインパターンを利用しながら並列処理が可能になる
 Point 2


Slide 14

Slide 14 text

ご清聴いただきありがとうございました
 Thank You We are Hiring !
 https://recruit.fusic.co.jp/