goroutineに関するakaneharaのブックマーク (3)
-
golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golang の goroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat
-
http://blog.gopheracademy.com/day-02-go-1.2-performance-improvements Gopher Academyがブログで、Go 1.2 のパフォーマンス改善点をまとめています。1) 8kb stack segments goroutineはデフォルトで4,096 bytesのstack segmentsが割り当てられているが、繰り返しのある、もしくは長いcall chain︵ほとんどのencoding/*パッケージはこれに当てはまる。︶のstack splittingやstack straddlingのある内部ループを含むコードは、パフォーマンスが落ちることで知られていた。10月がRuss Coxが、この値を倍の8kにすることを提案。前提となるJsonEncoderのベンチマークが安定しないという問題があったが、Go1のベンチマー
-
追記 この記事は元々 Goのイディオムとして、いわゆるジェネレータの実装がどうできるのかを軽い気持ちで書いただけで、速いから﹁Closure を使いましょう﹂などと一言も言ってなかったのですが、一方が channel であったため原子性についての言及がいくつかありました。 自分としては、ローカルのちょっとしたツール(shell の代わりくらい) の中で使ってただけなので、並行性には言及するつもりがそもそも無かったのですが、自分もそうした前提を書いていなかったのにも原因があります。 例えばこの記事が﹁グローバルシーケンス﹂の実装例として参考にされ Web アプリにでもコピペされて、バグの原因になったりでもしたらマズイので大幅に追記します。 (正直ロックを使った排他制御はあまり得意では無いですが。。) Intro 無限に連番を生成するロジックをジェネレータとして組むときに、 Goの場合は二
-
1