[Golang]アルゴリズムにチャレンジ ~Channelでワーカープールを実装しよう!~

こんにちは。KOUKIです。

とあるWeb系企業で、Goエンジニアをやっています。

今回は、Channelでワーカープールを実装しながらアルゴリズムを勉強しましょう。

ワーカープールの概要

ワーカープールは、Producer(提供者)がChannelを通じて😀君(Worker)をプールに蓄積し、Channelを介してConsumer(消費者)に提供するアルゴリズムです。

Poolに😀君を貯めることで、手隙になったプロセスが順次処理できるといういい感じのプログラムを実装できます。

実装

In/Out Channel

まず、「Channel In」と「Channel Out」を定義しましょう。

Channelは上記の様にmakeを使って宣言します。int型の値を受信、送信できるようにしました。

Workerの作成

次に、Workerを作成しましょう。

「inチャネルからデータを取得し、500ms待機してからoutチャネルに渡す」仕事を作成しました。

これは、main関数からgoroutineで呼び出しましょう。

Producerの作成

次に、Producerを作成しましょう。

このProducerは、Inチャネルにデータを送信し続けます。

これもmain関数からgoroutineで呼び出します。

Consumerの作成

最後に、Consumerを作成します。

Channelをrangeでループすると取り出すデータがない場合、データが入力されるまでプログラムをストップしてくれます。

これもmain関数から呼び出しましょう。

プログラムの実行

プログラムを実行しましょう。

いい感じで、Send/Recvが出力されていますね。

おわりに

Channelの実用的なパターンとして、今回紹介した方法は大変意義があるものだと思います。

別のパターンとして、パイプライン処理もおすすめです。

かっこいいよく読みやすいプログラムを書くために、皆さんもぜひチャレンジしてくださいね!

それでは、また!

Go記事まとめ

アルゴリズムまとめ

Go記事をまとめます。

ソースコード

コメントを残す