タグ

channelに関するoinumeのブックマーク (11)

  • Goの非同期処理で気をつけると楽になるかもしれないこと - mizkeiのブログ

    この記事は Gopher道場 Advent Calendar 2018 17日の記事です。 はじめに 第4回Gopher道場の ゴルーチンとチャネル のテーマの際にメンターを務めました。 いくつか質問を受けたり、課題をレビューする中で channel goroutine の扱いが慣れないために、動作が不安定だったり、 エラーの処理が難しくなってしまっているコードが散見されました。 Goに初めて触る人にとって channel goroutine はやはり難しいということだと感じましたので、 この記事では、Goに慣れていない人向けに、Goで非同期処理を書くときに気をつけることを紹介します。 少しでもGoで非同期処理を書く時に参考になればと思います。 非同期処理を記述するときに気をつけると嬉しいかもしれないこと 気をつけたほうが良い点は、シンプルさを保つために意識していることですが、もちろん常に

    Goの非同期処理で気をつけると楽になるかもしれないこと - mizkeiのブログ
  • Big Sky :: Go 言語の非同期パターン

    Gogoroutine という非同期の仕組みを提供していますが、使い方次第では色々なパターンが実装できる為、初めて goroutine を見た人はどの様な物が正解なのか分からない事があります。以前、このブログでも紹介した事がありますが Go の非同期の仕組みは一見単純な様に見えて実はとても奥深いのです。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればど... https://mattn.kaoriya.net/software/lang/go/20160706165757.htm 2012 年に Rob Pike 氏が Google I/O で「Go

    Big Sky :: Go 言語の非同期パターン
  • Big Sky :: golang の channel を使ったテクニックあれこれ

    golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golanggoroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat

    Big Sky :: golang の channel を使ったテクニックあれこれ
  • GoのChannelを使いこなせるようになるための手引 - Qiita

    Go使いたくなる理由の一つに、マルチスレッドプログラミング的なものを高速な言語で安全に実装したいというのがある。Goにおいてそれを支えるのが、自前で実装した軽量スレッドといえるgoルーチンと、mutexなどのロックの代わりに使えるChannelという概念だ。 実際に実装するときに、Goルーチンは難しくないが、Channelを使うのは割と知識と経験が必要なのでここでは、Channelについてすこし詳しく書いてみる。 Message Passing まずは理論から。 Goのチャネルなどのロックを使わない方法の並行処理はMessage Passingと呼ばれている。 以下の英語Wikipediaにあるように数学的な理論にもなっているしっかりした枠組み。 ErlangのActor Modelなどもこの仲間。GoのチャネルとActor Modelは、実は、同等の概念で表現方法が違うだけらしい。 (

    GoのChannelを使いこなせるようになるための手引 - Qiita
  • Go の channel 処理パターン集 | Hori Blog

    Hori Blogフリーランスでバックエンドエンジニアとして活動している Ryota Hori のブログです。 最近はテック系記事より雑記ブログ気味。 この記事は Go Advent Calendar 2017 の 1 日目の記事です。 Go の長所に goroutine による非同期処理がありますが、どうしても channel の取り回しで黒魔術化しがちです。少しでも闇を減らしていきたいので、 channel らへんの取り回しについてパターンをまとめました。チートシート的に使えれば嬉しいです。 Go の channel の基礎 入門資料として使いたいので、題に入る前にざっくり基礎を。 定義のパターン channel には capacity という概念があります。 capacity は channel 内でバッファリングしておける容量のことで、 capacity に空きが無い場合は送信側

    Go の channel 処理パターン集 | Hori Blog
    oinume
    oinume 2018/05/16
    channelからの値の受信について詳しい。あとchannel使う時のアンチパターンもまとまっていて良い
  • Re: golang の channel を使って Dispatcher-Worker を作り goroutine 爆発させないようにする - okzkメモ

    こちらを読みました。 blog.kaneshin.co channel自体にdispatch機構があるからもっとシンプルに書けるのでは?と思って書き直したのがこちら。 コードだけぶん投げてもアレなので、あとで解説書きます。 ついでに「go1.7で標準化されたcontext使ったらどうなるか」も気力次第で書くかもしれません。 というわけで追記というか、編というか、解説です。 channel整理 元のコードを読んでいくと、 dispatcherのqueueにjobを突っ込む dispatcherがidle状態のworkerをpoolから取り出す 同じ行で取り出したworkerのqueueにjobを渡す workerがjobを受け取って処理する。 というカンジの処理の流れになってるんですが、dispatch機構自体がchannelにはあるので、 dispatcherのqueueにjobを突っ込

    Re: golang の channel を使って Dispatcher-Worker を作り goroutine 爆発させないようにする - okzkメモ
  • Handling 1 Million Requests per Minute with Go

    Handling 1 Million Requests per Minute with Go Jul 6, 2015 Here at Malwarebytes we are experiencing phenomenal growth, and since I have joined the company over 1 year ago in the Silicon Valley, one my main responsibilities has been to architect and develop several systems to power a fast-growing security company and all the needed infrastructure to support a product that is used by millions of peo

    Handling 1 Million Requests per Minute with Go
  • ゴルーチンと並行性パターン - Qiita

    go func() { // HL1 log.Printf("Hello, %s\n", name) }() // HL1 package main import ( "log" "os" "time" ) func logging(fmt string, args ...interface{}) { log.Printf(fmt, args...) } func main() { name := "Gopher" go logging("Hello, %s\n", name) logger := log.New(os.Stdout, "", log.Ldate | log.Ltime) go logger.Printf("Hello, %s\n", name) go func() { log.Printf("Hello, %s\n", name) }() time.Sleep(100 *

    ゴルーチンと並行性パターン - Qiita
  • Go by Example: Non-Blocking Channel Operations

    Basic sends and receives on channels are blocking. However, we can use select with a default clause to implement non-blocking sends, receives, and even non-blocking multi-way selects.

    oinume
    oinume 2015/01/07
    channel に値があるときは即座にとってきて、無いときはブロックせずに返ってくる方法
  • Big Sky :: Golang の channel の使い所

    golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその groutine と通信する為の仕組みと考えると分かりやすいです。 package main import ( "fmt" "time" ) func main() { task := make(chan string) taskquit := make(chan bool) workerquit := make(chan bool) go func() { loop: for { select { case <-taskquit: workerquit <- true break loop case job := <-task: fmt.Println(job) } } }() go func() {

    Big Sky :: Golang の channel の使い所
  • Advanced Go Concurrency 3 つのパターン - Block Rockin’ Codes

    intro ちょっと時間が経ってしまいましたが、 Go研 vol.03 では、 Google I/O 2013 で行われてた Go のセッションの 1 つである下記をテーマに研究しました。 Advanced Go Concurrency Patterns 資料は以下です。 https://github.com/goken/goken/blob/master/goken03/goken03.md また、ここから順に実装しながら解説をしますが、その完成品はこちらにあります。 (commit 履歴も、記事にある程度沿っています。) https://gist.github.com/Jxck/5831269 スライドにそってやったのですが、セッションの内容は結構重ためだったので、 2 時間の Go 研だとちょっと消化不良ぎみだったのが反省点です。 そこで、このセッションの要である、並行処理に関する

    Advanced Go Concurrency 3 つのパターン - Block Rockin’ Codes
  • 1