Goで同時実行数を制限しながらループを並列処理する。
Web+DB Press Vol95 のGoの記事を読んで理解するために自分でも書いてみた。
- 作者: 小出淳子,黒澤剛志,牧大輔,横江亮佑,山口貴也,尾藤正人,佐藤琢哉,中橋研太郎,田中慎司,小西裕介,伊藤直也,稲富駿,前島真一,長野雅広,山際康貴,のざきひろふみ,うらがみ,岡林大,遠藤雅伸,ひげぽん,海野弘成,はまちや2,竹原,大場寧子,大場光一郎,野々下裕子,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/10/22
- メディア: 大型本
- この商品を含むブログを見る
秒単位でスリープ処理を入れてしまっているので、実行時間は長いです。そこはお勉強用ということで。
出力結果
time:2016-12-02 14:40:49.5804542 +0900 JST index:-1 item:-1 sleepなし。順番不定。 time:2016-12-02 14:40:49.580639488 +0900 JST index:2 item:3 time:2016-12-02 14:40:49.580686796 +0900 JST index:3 item:4 time:2016-12-02 14:40:49.580652343 +0900 JST index:0 item:1 time:2016-12-02 14:40:49.580703936 +0900 JST index:4 item:5 time:2016-12-02 14:40:49.580712672 +0900 JST index:5 item:6 time:2016-12-02 14:40:49.580725039 +0900 JST index:6 item:7 time:2016-12-02 14:40:49.580731445 +0900 JST index:1 item:2 sleepあり。順番に出力。 time:2016-12-02 14:40:50.582086998 +0900 JST index:0 item:1 time:2016-12-02 14:40:51.581872261 +0900 JST index:1 item:2 time:2016-12-02 14:40:52.581816362 +0900 JST index:2 item:3 time:2016-12-02 14:40:54.583265777 +0900 JST index:3 item:4 time:2016-12-02 14:40:56.583142187 +0900 JST index:4 item:5 time:2016-12-02 14:40:58.582018719 +0900 JST index:5 item:6 time:2016-12-02 14:41:01.584457553 +0900 JST index:6 item:7 sleepあり。Sleepの短い順番に出力。 time:2016-12-02 14:41:03.585628436 +0900 JST index:1 item:2 time:2016-12-02 14:41:04.58563381 +0900 JST index:0 item:3 time:2016-12-02 14:41:05.585852568 +0900 JST index:3 item:2 time:2016-12-02 14:41:06.585637432 +0900 JST index:2 item:5 time:2016-12-02 14:41:06.585995853 +0900 JST index:5 item:1 time:2016-12-02 14:41:12.586825274 +0900 JST index:4 item:8
セマフォ取得用のオブジェクトで、同時実行数の制限。deferで開放しないと詰まる。
WaitGroupでプログラムの待ちを設定。ないと、スリープ処理をしてる間にプログラムが終了してしまう。deferでセマフォを開放するタイミングで一緒にWaitGroupも減らす。