非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語で並列処理はたしかにメチャ簡単だった

      2017/03/11

Go言語について調べると必ずと言っていいほど出てくるのが、並列処理が簡単に書けるって話です。正直、個人でプログミングしているうちはあんまり並列処理にお世話にはならないのですが、どんだけ簡単か興味がわいたのでちょっと触ってみました。

※アイキャッチ画像に自作Gopher君を載せていますが、Gopherの原著作者はRenée French氏です。

[ad#top-1]

たしかにメチャ簡単だった

goroutineと言うそうです。関数の呼び出し時に頭にgoを付けると並列で処理してくれるという、確かに簡単な方法です。JavaやC#みたいにわざわざクラスを宣言する必要もありません。

下記がそのコードです。

 

10回のループの中に内部関数と外部関数の呼び出しをしていますが、いずれも頭にgoと書いています。これでそれぞれが独立して処理されるわけです。

結果は以下の通りです。

$> go run test.go
Thread1
Thread2
Thread1
Thread2
Thread3
Thread2
Thread1
Thread3
Thread2
Thread3

 

同期的に動く場合は、Thread1, Thead2, Thead3 …. と順番で表示されますが、順番は崩れていることから、並列処理されていることがわかります。

あと、本来、3出力×10ループで30行出力されるはずですが、10行で終わってしまっています。これは、並列処理が同期をとっていないので、すべて表示される前にループの終わってしまったためです。

もし、すべて表示させた場合はループを遅らせる必要がありますが、22行目のコメントアウトを外して1秒間だけ止めると、並列処理のスピードの方が勝って、すべての処理が完了できます。

JavaやC#にくらべて確かに簡単にできますね。

 

□余談□

アイキャッチ画像のgopher君はパワポの図形描画で描きました。「頂点の編集」を駆使してがんばりました。疲れた・・・。

 

[ad#ad-1]

スポンサーリンク

 - Go言語