[Go言語]Goroutineとパイプライン処理

こんにちは。KOUKIです。

今回は、Go言語でパイプライン処理を実装してみましょう!といった趣旨の記事です。

パイプラインとは

工場のラインを思い浮かべてください。

商品を作るのに様々な工程があって、一つ一つの工程が完了したら後続の工程に受け渡していく、パイプラインとはそんな処理です。

<例>
サンドイッチを作る

工程1:パンをきる -> 工程2: 切ったパンにハムをのせる -> 工程3: パンを包む -> 完成

この様に、各工程をパイプで繋ぐような処理をここではパイプラインと呼びます。

Go言語では、goroutinechannelをうまく活用することで、このパイプラインを表現することができます。

作るもの

こんな感じのものを作ってみましょう。

工程1: 数値生成 -> 工程2: 数値を累乗する -> 結果を表示する

工程1と工程2をパイプで繋ぎます。

実装

事前準備

ワークスペースを作りましょう。

工程1: 数値生成

最初に数値を生成する関数(工程1)を定義します。ここでは、渡された数値をチャネルに格納するだけの処理です。

工程2: 数値を累乗する

次は工程1から受け取った結果を累乗するプログラムを書きます。

結果を出力する

最後にパイプラインで処理した結果をコンソールに出力してみましょう。

generate関数に2と4を渡したので、最終的に4,16となるはずです。

プログラムを実行します。

OKですね。

channelを受け取るので、こんなこともできます。

さらにこんなこともできます。

素晴らしいですね。部品(工程)を作ればいくらでも繋げていけるわけです。

まとめ

ある程度プログラミング経験を積んでしまうとスキルアップを感じなくなってしまいますが、goroutineとパイプラインの概念は私にとっては新鮮でした。

プログラマでありながら、並行処理をほとんど書いたことなかったので、ガンガンgoroutineを使いこなして行きたいと思います!

それではまた!

Go記事まとめ

オススメ記事