Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goでパイプライン/Pipeline_with_Go

 Goでパイプライン/Pipeline_with_Go

E7151ab8219e76672f7a7691dd2c88e6?s=128

shiro seike

June 10, 2021
Tweet

Transcript

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


  2. 自己紹介
 清家 史郎
 seike460
 - ID
 - Github:seike460
 - Twitter:@seike460


    - Work at
 - 株式会社 Fusic (フュージック) 
 技術開発本部/技術開発第一部門 
 ▪ エバンジェリスト
 ▪ チームリーダー
 ▪ プリンシパルエンジニア
 - Skill
 - PHP
 - Go
 - AWS
 2

  3. パイプライン

  4. パイプライン
 パイプライン
 データストリームやバッチ処理を行う際等に、 
 データを受け取って何らかの処理を行って、どこかに渡す一連の作業 
 
 これらの操作をパイプラインのステージと呼びます。
 
 ステージには以下の性質があります。

    
 
 - 前段ステージの戻り値の型と
 後段ステージの入力の型が一致している 
 - 引き回せる様に具体化されている 
 (Goは関数の形で具体化されている) 
 
 4

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


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

    
 

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


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

    
 8

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


    作成したチャネルを返す 

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


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


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

    
 パイプラインが構築出来る 

  13. まとめ
 Point 3
 「Go言語による並行処理」はいい本なのでぜひ読みましょう 
 13
 ステージを介する事で簡単にパイプラインを構築する事が出来る
 Point 1
 


    Goのチャネルをつかうと、パイプラインパターンを利用しながら並列処理が可能になる
 Point 2

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