[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 22 件 / 22件

新着順 人気順

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

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

goroutineに関するエントリは22件あります。 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の使い方

          この記事は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 | ラクス エンジニアブログ
            • 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でバッチ処理時間を大幅に改善した話 - 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 - QiitaGo7のカレンダーページです。https://qiita.com/advent-calendar/2019/go7 今回は Go言語による並行処理 の内容を理解するためのアウトプットです 🐥 もう少し見直してから公開しようと思ってたんですが、23日目の枠が偶然にも空いていたのでもう公開してしまいます😈 これで4枠目です。ごめんなさい、そしてありがとう。 久々に結構長めなので余裕のある方だけどうぞ。 GoroutineGoroutine(ゴルーチン) は 並行処理を扱うためのコルーチンです。 普通のコルーチンとは違って処理の割り込みや再開を開発者がプログラム上から制御することはできません。 ゴルーチンはM:Nモデルと呼ばれ

                        [Golang] Goroutine を支える技術
                      • 【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
                                • 【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(アライズ アナリティクス)
                                  • 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: トレーシングをしながら並行処理を学ぶハンズオンです
                                    • 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の並行処理入門 - Goroutine基礎編 - Yappli Tech Blog

                                        はじめに こんにちは。昨年の11月にYappliへ入社したしがないサーバーサイドエンジニアの佐野(@Kiyo_Karl2)です。 自分はYappliに入社するまでGo言語を利用した経験が無く、言語仕様についての理解がまだ浅いと感じる部分があるなと思っています。 そのため、今回はGo言語の最大の特徴でもあるGoroutineについてまとめてみました。 本記事は、4本の連載記事の1本目となります。 Goの並行処理入門-Goroutine基礎編 ←今ここ Goの並行処理入門-syncパッケージ編 Goの並行処理入門-channel編 Goの並行処理入門-select編 対象読者 Go言語の基礎はわかっているが、Goroutineについてはあまり理解していない メモリ、プロセス、スレッド、並行処理、並列処理といったワードについて概要とその違いを理解している 連載記事を通して取り扱わないこと 本連載

                                          Goの並行処理入門 - Goroutine基礎編 - Yappli Tech Blog
                                        • Goのgoroutine, channelをちょっと攻略! - Qiita

                                          Goのgoroutine, channelがわからない マルチスレッドってなんやねん! go ステートメントってなんやねん! <- なんやねんこれ!意味不明 これをやりましょう → Go by Example やっていれば、なんとなくわかってくる。かも 以下は Go by Exampleを少し変更を加えて実行した例です。 Goroutineとは Tour of go によると goroutine (ゴルーチン)は、Goのランタイムに管理される軽量なスレッドです。 まず、スレッドがちゃんと理解してない スレッド:一連のプログラムの流れ シングルスレッド:1つのスレッドだけからなるプログラム マルチスレッド:1つのプログラムで複数のスレッドを同時に実行する マルチスレッド最強やんけ!ずっとこれ使えば小早川セナじゃん! → 実際には、しっかり理解して使わないとパフォーマンスが低下したり、デッドロ

                                            Goのgoroutine, channelをちょっと攻略! - Qiita
                                          • 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をどうビジネスロジックに当てはめるか
                                            • MackerelでGoroutineのブロックを検知したい - Qiita

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

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

                                              新着記事