並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 26 件 / 26件

新着順 人気順

goroutineの検索結果1 - 26 件 / 26件

タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。

goroutineに関するエントリは26件あります。 golanggotechfeed などが関連タグです。 人気エントリには 『言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)』などがあります。
  • 言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)

    Twitterで "green thread" という単語をたまたま見かけたので、知っていることをつぶやいたよ。 Green thread 言語のスレッドとOSのスレッドの関係 N:1 mapping 言語のスレッドの全てがひとつのOSのスレッドの上で実行されるもの。その代表が上記のJavaのgreen thread。 OSのシステムコールを呼ぶときには必ずnonblockingモードを使い、EAGAIN または EWOULDBLOCKが返ってきたときには他のスレッドの実行権に譲るようにする必要がある。うっかりシステムコールでブロックされてしまうと、全部のスレッドが巻き添えになって動けなくなる。 スレッドの生成やコンテキストの切り替えは軽い。しかし、マルチコアを生かすことができないため、シングルコアの環境でのみ使用される。 1:1 mapping OSのスレッドと言語のスレッドが1対1対応

      言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)
    • Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ

      技術記事です。今日は Go の golang.org/x/sync/errgroup についてです。 TL; DR Go が並行処理を得意とするのは事実だけど、とはいえ正しく使うのは難しい(特に channel)。 errgroup なら「並行でダウンロードする」のような頻出パターンをとても簡単かつ安全に使えるので、まずはこれで美味しいところだけ頂いてしまおう。 重い処理を並行にすればあなたのプログラムはカジュアルに数倍速くなる。 多分 errgroup だけで現実の要件の85%くらいはカバーできるはず。 channel も含めてちゃんと使いこなしたいと思ったら、Go 言語による並行処理 がおすすめです。 errgroup とは ドキュメントはここを参照してください。説明を読むよりコード例で見たほうが早いと思うのでこちらをどうぞ。 package main import ( "fmt" "

        Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ
      • 原理原則から適切なgoroutineの数を考える

        概要 動機 goroutineを使ってパフォーマンスを改善する際に、どれくらの数で並行処理すればいいのか分かりませんでした。そこで、そもそもどのような仕組みなのか調べ、どのような性質の仕事が改善されるのか計測して、適切な数を決めるための観点を整理しました。 要約 goroutineはカーネルスレッドとM:Nの関係になっています。そしてカーネルスレッドごとにgoroutineのキューがあり、Goのスケジューラが順次実行していきます。 IO-Boundな処理は、netpollerが別のカーネルスレッドで非同期でシステムコールを実行するので他のgoroutineをブロックしないようになっています。 goroutineの使用時には以下の観点を留意する必要が計測から分かりました。 goroutineを使う場合はコンテキストスイッチのコストとトレードオフになる CPU-Boundなgoroutineは

          原理原則から適切なgoroutineの数を考える
        • 複数のGoroutineをWaitGroup(ErrGroup)で制御する - Hack Your Design!

          この記事はGo7 Advent Calendar 2019五日目の記事です。 やりたいこと 下記のように直列で動作し実行時間の長いGoのプログラムを、並行処理に変えて処理を効率化させます。 package main import ( "fmt" "time" ) func main() { for i := 0; i < 100; i++ { time.Sleep(2 * time.Second) // 長い処理 fmt.Println("End:", i) } }

            複数のGoroutineをWaitGroup(ErrGroup)で制御する - Hack Your Design!
          • Goroutineの使い方

            この記事はGo 言語 Advent Calendar 2023のシリーズ2の4日目の記事です(穴があったので入りました!)。 goroutineの特徴 コルーチンをベースにコルーチンの以下の点を改良 言語組み込みワード「go」にて起動できる M:Nスレッドシステム採用によりマルチコア分散処理が可能 ブロッキングを検出したらネイティブスレッドが独立 プリエンプティブ性を追加(Go1.14以降) 以上により、goroutineスレッドシステムはコードを書く人にとって「ネイティブスレッド」の感覚で実装を書くことができ、「コルーチン」のようにメモリやタスクスイッチ負荷が小さく、「コルーチン」のような面倒な制約(期待するレイテンシ以上にCPUビジーにしてはいけないなど)も無いといういいとこどりのスレッドシステムになりました。 ネイティブスレッドライクによる特性 ネイティブスレッドを使ったプログラミン

              Goroutineの使い方
            • Go言語の平行処理をやってみよう!【goroutine】 - RAKUS Developers Blog | ラクス エンジニアブログ

              はじめに おはようございます、こんにちは、こんばんは、rks_hrkwと申します。 もう1月も終わりですね。皆様いかがお過ごしでしょうか。 この記事はGo言語といえばの機能の一つである、ゴールーチン(goroutine)の入門記事となっております。 この記事は Go触ってみたけどまだゴールーチンは勉強してないよ Go触ったことないけどGoでの平行処理に興味があるよ という方向けです。 ※入門記事のため細かい箇所や複雑な箇所は説明を省いている可能性がありますご了承ください。 また、Goの環境構築については以下の記事をご参照ください。 tech-blog.rakus.co.jp 目次 はじめに 目次 並行処理って何? ゴールーチン ゴールーチンを書いてみよう 1行消す前の処理順 1行消した後の処理順 syncパッケージ sync.WaitGroup さいごに 参考文献 並行処理って何? 並行処

                Go言語の平行処理をやってみよう!【goroutine】 - RAKUS Developers Blog | ラクス エンジニアブログ
              • なぜ Go では何百万もの Goroutine を作れるのに Java は数千のスレッドしか作れないのか?

                なぜ Go では何百万もの Goroutine を作れるのに Java は数千のスレッドしか作れないのか? (この記事は Why you can have millions of Goroutines but only thousands of Java Threads の翻訳です) 経験のあるエンジニアならば JVM 言語で次のようなエラーを見たことがあるでしょう。 [error] (run-main-0) java.lang.OutOfMemoryError: unable to create native thread: [error] java.lang.OutOfMemoryError: unable to create native thread: [error] at java.base/java.lang.Thread.start0(Native Method) [erro

                  なぜ Go では何百万もの Goroutine を作れるのに Java は数千のスレッドしか作れないのか?
                • Rustのasyncをgoroutineよりも高速に

                  RustのgRPCの速度がGoよりも遅いため、デファクトの並列処理方法のasyncではなく、システムコールを直接使うという歪んだ愛の形で、Goよりも高速化を達成した前回。 私たちのRustへの愛は裏切られたのか?私たちがRustの愛を裏切ったのか?2つの思いの間を行き来しながら、asyncでも、goroutineよりgRPCを高速に実行できるか試してみましょう。 システムコールよりもランタイム前回は、ソケットをブロックしないように設定し、epollシステムコールでイベントを待つような、C言語のような実装でした。クラウドネイティブ時代に、Rustに加えて、そんな知識を習得している時間はないですよね!語り部を目指しているなどの特殊な理由で、epollについて知りたい場合は、前時代的な人に聞けば、Kqueueとepollの戦い、などの物語を朝まで聞くことができるでしょう。 非同期プログラミングの

                    Rustのasyncをgoroutineよりも高速に
                  • goroutine leakを解消したい!

                    この記事は、Magic Moment Advent Calendar 2023 15日目の記事です。 こんにちは! Magic Moment で Backend Engineerをしている 大塚 です。 Magic MomentではGo言語によるマイクロサービス開発をしているのですが、ある日、あるサービスのメモリ使用量が継続的に上昇する現象を観測しました。 そこで、どういった調査をしてどのように解消までいったかをまとめました。 メモリ使用量の上昇を観測 メモリ使用量が日々上昇していることが確認できます。さっそくどこで何が原因でメモリリークしているか確認してみます。 Cloud Profilerで確認 以前よりCloud Profilerを導入していたため、まずはCloud Profilerでメモリ使用量やgoroutineの数を確認しました。 Cloud Profilerについては弊社Te

                      goroutine leakを解消したい!
                    • 遺伝的アルゴリズムの並列化とgoroutineによる実装 - Fire Engine

                      先日、「遺伝的アルゴリズムをGoで実装してみた」という記事を書きました。 この内容で2019年7月13日(土)に開催されるGo Conference'19 in Fukuokaに登壇させていただくことになったので、開発中のeagoというパッケージをもっと作り込んで行きたいと思います。 今回は、遺伝的アルゴリズム(以下、GA)の計算処理をgoroutineでサクッと並列化した話です。 概要 GAは複数の個体を用いた多点探索のアルゴリズムであるため、本質的に並列化と親和性が高い手法であると言えます。実用的な観点からも短い計算時間で良好な解を得ることが望まれているため、これまでに数多くの並列化手法が提案されています。 今回はGo言語の強みの一つであるgoroutineを使ってGAの処理の一部を並列化してみます。また、擬似問題に対してベンチマークを取り、実装した並列処理が全体の計算時間短縮に有効で

                        遺伝的アルゴリズムの並列化とgoroutineによる実装 - Fire Engine
                      • goroutineでバッチ処理時間を大幅に改善した話 - Tech Do | メディアドゥの技術ブログ

                        はじめに こんにちは、Media Do Tech Do Blog初執筆のogadyです。 メディアドゥには2019年の8月に入社して、この度ついにブログ執筆させていただくことになりました! 本記事では、私のチームで運用しているバッチツールをgoroutineで高速化した話をさせていただきます。 背景 現在メディアドゥでは、二つの電子書籍取次システムを片寄せし、統合する案件を進めています。 私のチームは、システムのDBマイグレーションを行う移行・突合システムをgoで開発・運用しています。 移行・突合システムでは、移行元の取次システムのデータを移行・突合システムにインポートして、ごちゃごちゃ加工してマイグレーションしています。 移行・突合システムイメージ図 この「取次システムのデータを移行システムにインポートして」という部分が曲者で、最新状態を保つため定期的・突発的に移行システムのDBを総入替

                          goroutineでバッチ処理時間を大幅に改善した話 - Tech Do | メディアドゥの技術ブログ 
                        • ScalaにGoroutineがやってくる!非同期処理ライブラリOxで遊んだ - Lambdaカクテル

                          Channelスタイルの並行処理の記述を(もちろん型安全に)可能にするライブラリOxについて調べて試してみた。結論から言うと書き味がめちゃくちゃ良くて面白い。 ソースコードも置いておく。 github.com Ox Oxとは、sttpなどの開発でお馴染のSoftwareMillによって開発されているScala用の非同期ライブラリである。まだ非常に若く、活発に開発されている。 github.com Oxの特徴は、というか目的といっても差し支えないのだが、それはChannel指向の非同期処理、つまりGoroutineをScalaの上で実現している点だ。Goユーザならすぐに理解できるだろう。 百聞は一見に如かず。こんな感じのコードを書くことができる(v0.0.25時点)。 import ox.* import ox.channels.* import scala.concurrent.durat

                            ScalaにGoroutineがやってくる!非同期処理ライブラリOxで遊んだ - Lambdaカクテル
                          • [Golang] Goroutine を支える技術

                            この記事は Go7 Advent Calendar 2019]の 23日目の記事です。 Go7 Advent Calendar 2019 - QiitaAdvent Calendar for Gophers Go1 https://qiita.com/advent-calendar/2019/go Go2 https://qiita.com/advent-calendar/2019/go2 Go3 https://qiita.com/advent-calendar/2019/go3 Go4 https://qiita.com/advent-calendar/2019/go4 Go5 https://qii...https://qiita.com/advent-calendar/2019/go7 今回は Go言語による並行処理 の内容を理解するためのアウトプットです 🐥 もう少し見直してか

                              [Golang] Goroutine を支える技術
                            • Go: Goroutine and Preemption

                              Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.ℹ️ This article is based on Go 1.13. ℹ️ Go implements an asynchronous preemption in Go 1.14, making some part of this article obsolete. However, those sections will be marked as it, making the article still useful to understand the need for the asynchronous preemption. For more details about asy

                                Go: Goroutine and Preemption
                              • 【Goのやさしい記事】goroutineと排他制御を10分で入門しよう! - Qiita

                                はじめに この記事ではgoroutineおよび関連性の高いsyncパッケージの基本知識や使い方をまとめます。 Goの基本的な文法はざっと触れたが、「goroutine」、「WaitGroup」、「channel」、「Mutex」などの言葉を聞いて全く心配ないとは言い切れない人向けの記事です。 残念ながら、メモリやCPU、プロセスなどのOSに近いところまでは踏み入れません。 goroutineは簡単だとよく聞きますが、そもそも並行処理そのものが難しいので1つずつ理解してきましょう! 本記事での動作確認環境は以下です。 Goでの並行処理 ネットワーク通信などで待ち時間の大きい処理を非同期に行いたい、直列で動作させる必要がない処理群を高速に終わらせたいなどを理由に並行処理を使うことが多いと思います。 Goではgoroutineと呼ばれる軽量スレッドを簡単に動かせます。 なぜ「軽量」か メモリ消費

                                  【Goのやさしい記事】goroutineと排他制御を10分で入門しよう! - Qiita
                                • goroutineの同時実行数に制限をかける - kaznishi I/O

                                  Goにはgoroutineという強力な仕組みが備わっています。goroutineを使うことによって並行処理を簡単に実装することができます。 例えば次のような、実行に時間がかかる関数doSomethingがあったとします。 func doSomething(input string) { time.Sleep(1 * time.Second) // (何か時間がかかる処理) fmt.Println("input is " + input) } これを次のように直列に実行すればinputsの数分だけ時間がかかります。 func Baseline(inputs []string) { for _, v := range inputs { doSomething(v) } } しかし、次のようにgoroutineで並行化することで実行時間を大幅に短縮することができます。 func Concurre

                                    goroutineの同時実行数に制限をかける - kaznishi I/O
                                  • Finding Goroutine Bugs with TLA+

                                    My job these days is teaching TLA+ and formal methods: specifying designs to find bugs in them. But just knowing the syntax isn’t enough to write specs, and it helps to have examples to draw from. I recently read Chris Siebenmann’s Even in Go, concurrency is still not easy and thought it would make a good case study for writing a spec. In it, he gives an example of Go code which deadlocks: /*1 */

                                    • goroutineを使った並行処理の基礎 - Qiita

                                      Goを使う利点の一つとして、goroutineを使った並行処理の書きやすさがあります。 具体的にどんな感じで書くのかサンプルを見ながら理解を深めます。 なんとなくGoだと並行処理書きやすそうだなと思ってもらえると良いかなと思います。 goroutineとは Goで並行処理を実現するための仕組みで、Goランタイムによって管理される軽量スレッドのことです。 並行処理として実行したい処理の前にgoキーワードをつけると並行処理として実行できます。 ちなみにgoroutineで実現できるのは並行処理(concurrent)であり、並列処理(parallel)ではありません。 (このコーヒーマシンの例が個人的にはわかりやすい気がします) 例えば以下のように使用します。 package main import ( "fmt" "time" ) func main() { // 呼び出す関数の前にgoキー

                                        goroutineを使った並行処理の基礎 - Qiita
                                      • goroutine内のpanic handling - Money Forward Developers Blog

                                        こんにちは。 京都開発本部の櫻(@ysakura_)です。 今回のテーマは、goroutine内のpanic handlingです。 panic handlingを行う事でアプリケーションの予期せぬ終了を防止できます。 今回扱うgoroutine内のpanic handlingを把握する事で、予期せずAPIサーバーが終了する事や、レスポンスを返さない事を防止できます。 panicとは panicのおさらいです。 panicは、コールされるとプログラムが終了するビルトイン関数の事です。 panicの使い方 panic("hoge")といった様に、ビルトイン関数であるpanicを呼ぶと使えます。 recoverというビルトイン関数を呼ぶ事で、panicによるプログラムの終了を止める事も出来ます。 panicの挙動 Goの仕様によると、以下の様に書かれています。 While executing

                                          goroutine内のpanic handling - Money Forward Developers Blog
                                        • GitHub - felixge/fgtrace: fgtrace is an experimental profiler/tracer that is capturing wallclock timelines for each goroutine. It's very similar to the Chrome profiler.

                                          You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                            GitHub - felixge/fgtrace: fgtrace is an experimental profiler/tracer that is capturing wallclock timelines for each goroutine. It's very similar to the Chrome profiler.
                                          • Goを用いたPOS連携実装の学びとTIPS チャネルとgoroutineをどうビジネスロジックに当てはめるか

                                            Goの初心者から上級者までが1年間の学びを共有する勉強会、「GeekGig #1 ~Goと私の一年~」。ここで株式会社Showcase Gigの照井氏が登壇。Goを用いたPOS連携実装で学んだことを紹介します。 アジェンダと自己紹介 照井寛也氏(以下、照井):「POSレジとGo」というタイトルでさっそく発表します。今回話す内容ですが、チャネルとgoroutineを、実際のビジネスロジックでどのように使っているかの事例の共有と、そこから得た学びを共有します。 アジェンダとしてはこのようなかたちになっています。まず自己紹介をし、Showcase Gigが提供する次世代店舗プラットフォーム「O:der(オーダー)」とPOSレジの関係性、そこからチャネルとgoroutineを用いたPOS連携開発について話します。あとはそれらを開発実装したうえでの学びを共有します。 というところで、さっそく自己紹介

                                              Goを用いたPOS連携実装の学びとTIPS チャネルとgoroutineをどうビジネスロジックに当てはめるか
                                            • 【Go言語入門】goroutineとは? 実際に手を動かしながら goroutineの基礎を理解しよう! | 株式会社ARISE analytics(アライズ アナリティクス)

                                              Tweet 【Go言語入門】goroutineとは? 実際に手を動かしながら goroutineの基礎を理解しよう! はじめまして。2022年4月に中途入社し、現在Analytics Delivery Divisionでバックエンド開発をしているエンジニアのナムです。ARISE analyticsに入社してから開発言語としてGoを使うことになりました。Goの特徴・メリットはいろいろありますが、今回はその中でもgoroutineについて簡単に話したいと思います。 goroutineとは goroutineは「Goでプログラムの同時性を簡単に具現し、既存の単純スレッド基盤に比べて効率的な動作を遂行するために作った作業単位」です。全てのGoプログラムは必ず1個以上のgoroutineを持ち、常にバックグラウンドで動作します。それぞれのgoroutineは独立的に実行されます。goroutineの

                                                【Go言語入門】goroutineとは? 実際に手を動かしながら goroutineの基礎を理解しよう! | 株式会社ARISE analytics(アライズ アナリティクス)
                                              • goroutineの使いどころ

                                                この記事は eureka Advent Calendar 2019 4日目の記事です。 今回、goroutine最大のパフォーマンスを引き出すために、goroutineの使いどころについて考えてみました。 並行処理するとどのくらいメリットがあるの?この疑問を解決するのがアムダールの法則という並列化により期待できる性能向上を表した数式になります。 Credit:ja.wikipedia.org数式だと難しいので、オライリーのGo言語による並行処理で書かれている説明を見てみます。 そのプログラムの何割を並列化できないかによって、並列化による性能向上の限界が決まる これを少し言い換えてみると、並列化できない処理=(逐次的に実行しなければならない部分)の時間が、並行処理でのパフォーマンスの限界という事になります。 この並列化と性能向上を表した式がこちらです。 Credit:ja.wikipedia

                                                  goroutineの使いどころ
                                                • go言語で複数のgoroutineのエラーハンドリングをする - ludwig125のブログ

                                                  関連 ludwig125.hatenablog.com 複数のgoroutineの結果の取得 複数のgoroutineの結果の取得1(エラーが起きると中断する例) 第5章 並行プログラミング―ゴルーチンとチャネルを使いこなす:はじめてのGo―シンプルな言語仕様,型システム,並行処理|gihyo.jp … 技術評論社 こちらのコードを参考に以下のような複数のgoroutineを実行してその結果を取得する場合を考える package main import ( "fmt" "log" "net/http" ) func getStatus(urls []string) <-chan string { statusChan := make(chan string) for _, url := range urls { go func(url string) { res, err := http.

                                                    go言語で複数のgoroutineのエラーハンドリングをする - ludwig125のブログ
                                                  • GitHub - gohandson/goroutine-ja: トレーシングをしながら並行処理を学ぶハンズオンです

                                                    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                                      GitHub - gohandson/goroutine-ja: トレーシングをしながら並行処理を学ぶハンズオンです
                                                    • MackerelでGoroutineのブロックを検知したい - Qiita

                                                      Mackerel Advent Calendar 2020 22日目のエントリです。 先日、とあるGo製のアプリケーションで、Goroutineの処理がブロックされて停止していることで、アプリケーション全体の動作が停止するということがありました。 このような問題を検知するための監視をMackerelで行う方法を考えてみたので、このエントリで紹介します。 Mackerelでは、mackerel-agentのプラグイン機構やカスタムメトリックなどの機能によって、監視対象のシステム/アプリケーションの特性にあわせた様々な監視を実装することができます。これらの機能を使って監視実装をしてみます。 アプリケーションの動作が停止したときの状態 まずはじめに、問題のアプリケーションの動作が停止していたときに、どのような事象が発生していたかを説明します。 以下は、アプリケーションに問題が発生していたタイミン

                                                        MackerelでGoroutineのブロックを検知したい - Qiita
                                                      1

                                                      新着記事