【Go言語入門】goroutineの使い方を説明します

投稿日:

記事の内容


この記事では、Go言語のgoroutineの使い方を説明します。

goroutine

スレッドを生成して並列処理を行う

上手くいかない例

スレッドを生成して並列処理を行おうとしたけど、実行されない場合。
スレッドが生成される前にプログラムが終了すると、goで指定した関数は実行されません。

sync.WaitGroupで実行終了まで待つ例

sync.WaitGroupとwg.Waitを使うことで、スレッドが実行されるまで、プログラムは終了することを待ってくれます。
そうすることで、goで指定した関数が実行されます。
wg.Add()は、並列処理の数を指定することができます。

channel

channelの基本的な使い方

channelを使うことで、関数が並行して動きます。
下記の処理を見れば、channelの処理が並行して動いていることがわかります。
対象となる関数に、「channel chan int」を渡して、「<-」というキーワードを使って、データの受け渡しをしています。

繰り返し処理の中でchannelを使う方法

繰り返し処理の中でchannelを使う場合は、処理が終わった後に、必ずcloseをしましょう。

ProducerとConsumerパターン

producerで受け取った値をconsumerで加工しています。
出力を見てみると、producerに渡した値がランダムに実行されているのが特徴的ですね。
「forの中」は順番に実行されていますが、それ以降の処理は順番になっていません。

例外処理を意識した場合は、inner関数とdeferを使って実装します。

fan-in fan-out

channelを3つ、繋げた場合の処理です。
出力結果の順番をよく確認しておきましょう。

channelとselect

今まで通りのチャネルの書き方。
チャネルの処理がブロッキングされていることがわかる。

チャネルの処理がブロッキングされない書き方。

selectとdefault

channel1とchannel2がない時には、defaultの処理が実行されます。
breakの仕方も覚えておきましょう。

sync.Mutex

一つのmapに2つのgoroutineを使って書き込むと、成功する時と失敗する時があります。

それを避けるためにsync.Mutexを使用します。

まとめ

この記事では、Go言語のgoroutineについて説明しました。

Good luck for your engineer life!

Go言語をより詳しく勉強したい人は、この記事を読んで下さい


Rubyをより詳しく勉強したい人は、この記事を読んで下さい


Ruby on Railsをより詳しく勉強したい人は、この記事を読んで下さい


Javaをより詳しく勉強したい人は、この記事を読んで下さい


Gitをより詳しく勉強したい人は、この記事を読んで下さい


ErlangとElixirをより詳しく勉強したい人は、この記事を読んで下さい

関連コンテンツ

-Go, プログラミング

Copyright© プログラミング道場 , 2021 All Rights Reserved Powered by AFFINGER4.