前回の続きで且つ最終回です。
今回は、ゴルーチン、チャネル、select文、同期について解説します!
ゴルーチン
gist0a3d7bf520c67d2a5fc642c566b8d0ea
関数の前にgoを付けるだけで並列処理を実装できます。
ゴルーチン(並列処理)はとても軽いようです。
mainの処理はゴルーチンの終了を待たない。
ゴルーチンの結果を取得するにはチャネルを使う。(チャネルは次で説明します)
【実行結果】
チャネル
gistf87619cef1b1e9607da7cac090e1eca6
送信専用、受信専用は主に関数の引数として受け取る際に使用する。
使わなくなったチャネルは最後にcloseする。
受信専用チャネルはクローズできない。
クローズ済みのチャネルにデータ送信するとランタイムパニックが発生。
【実行結果】
select文
gistb403cc61f37027c64598f3e2438f767b
複数のチャネルを待機する場合は、select文を使う。
defaultはどのチャネルも受診しなかった時に呼ばれる。
defaultが無い場合は、受信するまで待機する。
【実行結果】
同期
gist80435d5c69ddf70b8d092edaabfdb1fe
WaitGroupをインクリメントする。
Doneでデクリメントする。
WaitはWaitGroupが0になるまで待つ。
つまり、並列でやりたい処理の数分インクリメントしてそれぞれの処理が終わればデクリメントしてWaitGroupが0になれば全ての並列処理が完了。
【実行結果】
Gitに登録しました
前回記事のソースに追加で今回のソースもGitに登録しました。
【関連記事】
このソースを試して見たい方は下記記事で簡単に開発環境を作成できますよ!
コメント