ryochack.blogスマートフォン用の表示で見るryochack.blogこの広告は、90日以上更新していないブログに表示しています。2013-04-21Go言語の並行処理で総和を求めるgolangパタヘネ本の7章(マルチコアとマルチプロセッサとクラスタ)に以下のような(ちょっと違うけど)図が載っていたので、Goの並行処理を使って100,000個の数の和を求めてみた。最初の図とはちょっと違って、実際の制御はこんな感じ。値が2つ揃ったら、加算を行うgoroutineを生成する。goroutineからは、channelを通して合計が送信される。全ての数を足し切るまでこれを繰り返す。(足す順番は気にしない)足す数は0〜99,999までの等差数列。time.Millisecond)は、後々の単純総和コードとの比較のために、擬似的に処理を重くしているつもり。(足し算だけだと処理が軽すぎて並行処理にした方が遅かった...)下は単純に総和を求めるコード。total単純な総和が2分強かかっているのに対して、goroutineを使うと1.668秒。本当は、子ルーチン(生成したgoroutine)同士で通信を行なって、親ルーチン(大本のgoroutine)には結果だけを返すように実装したかったけど、channel制御が複雑になってしまって断念。子ルーチンの計算結果を親ルーチンに返して、それを元にまた子ルーチンを生成する方法で実装した。channel制御むずかしい...。deadlock起こす。(1)ArchiveLinkstwittergithubtumblrはてなダイアリーはてなブログをはじめよう!ryochackさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。