タグ goroutine
人気順 5 users 50 users 100 users 500 users 1000 usersGo でマルチスレッドプログラミングする際に最低限知っておくべきこと - Cybozu Inside Out | サイボウズエンジニアのブログ
この記事は、CYBOZU SUMMER BLOG FES '24 (クラウド基盤 Stage) DAY 10 の記事です。 こんにちは。クラウド基盤本部の野島です。Go は goroutine やチャネルなどの仕組みが備わっており、簡単にマルチスレッドなプログラムを書くことができる言語だと言われています。しかし、マルチスレッドプログラミングには独特の罠... 続きを読む
Goroutineの使い方
この記事はGo 言語 Advent Calendar 2023のシリーズ2の4日目の記事です(穴があったので入りました!)。 goroutineの特徴 コルーチンをベースにコルーチンの以下の点を改良 言語組み込みワード「go」にて起動できる M:Nスレッドシステム採用によりマルチコア分散処理が可能 ブロッキングを検出したらネイティブスレッ... 続きを読む
言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)
Twitterで "green thread" という単語をたまたま見かけたので、知っていることをつぶやいたよ。 Green thread 言語のスレッドとOSのスレッドの関係 N:1 mapping 言語のスレッドの全てがひとつのOSのスレッドの上で実行されるもの。その代表が上記のJavaのgreen thread。 OSのシステムコールを呼ぶときには必ずnonblockin... 続きを読む
Go言語の平行処理をやってみよう!【goroutine】 - RAKUS Developers Blog | ラクス エンジニアブログ
はじめに おはようございます、こんにちは、こんばんは、rks_hrkwと申します。 もう1月も終わりですね。皆様いかがお過ごしでしょうか。 この記事はGo言語といえばの機能の一つである、ゴールーチン(goroutine)の入門記事となっております。 この記事は Go触ってみたけどまだゴールーチンは勉強してないよ Go触ったこと... 続きを読む
sync.Condとはなにか | dtyler.io
2021/04/12 はじめに Goの sync.Cond は、マルチスレッド (正確にはgoroutine) プログラミングにおける同期プリミティブだ。 sync.Condはミューテックスと比べユースケースが限定的で、かつ使い方もやや複雑であると感じられる。そのためか、あまり現実世界での使用例を見ないように筆者には思われる。 本記事ではsync.C... 続きを読む
Rustの非同期ランタイムが多すぎる?io_uringなやつを使おう! - nttlabs - Medium
AWS、Google、Microsoftらが、Rust Foundationを設立し、今やRustでなければクラウドネイティブじゃない、と言っても過言ではありませんよね。クラウドネイティブと言えば、スケーラブルなシステム、Goはgoroutineを標準機能として提供しますが、Rustのasync/awaitは、標準機能に含まれていない外部ライブラリを必要とし... 続きを読む
Go の sql.DB がコネクションプールを管理する仕組み - Please Sleep
Go の database/sql パッケージ の DB 構造体 は、データベースへのコネクションプールを管理し、かつスレッドセーフ (goroutine セーフと言ったほうが良いのだろうか…?) にそれらの接続を使用できることを保証している。 ドキュメント にも次のように書かれている。 DB is a database handle representing a pool of ze... 続きを読む
プログラミング言語Go完全入門 - Google スライド
プログラミング言語Go完全入門 @tenntenn [TODO] ・fmt.Printfのverbsをまとめる ・RoundTriper的なパターンについても書く ・xerrorsに関する記述を増やす ・並行処理ハンズオンの話を入れる(https://github.com/tenntenn/gohandson/tree/master/goroutine) ・リダイレクトの方法 ・Formの入力 ・画像の返却 ・静的フ... 続きを読む
golangとDockerとOOM — KaoriYa
golangで書いたプログラムをDockerで動かしOOMが発生した際になるべく情報を残して殺される方法を紹介します。 TL;DR golang製のプログラムは仮想メモリ(VSZ)の確保に失敗するとgoroutineのダンプを吐いて死ぬ DockerのOOMはRSSベースで検出時にSIGKILLを投げてくる Docker利用時にVSZで制限をかけるスクリプトを書いた ... 続きを読む
遺伝的アルゴリズムの並列化とgoroutineによる実装 - Fire Engine
先日、「遺伝的アルゴリズムをGoで実装してみた」という記事を書きました。 この内容で2019年7月13日(土)に開催されるGo Conference'19 in Fukuokaに登壇させていただくことになったので、開発中のeagoというパッケージをもっと作り込んで行きたいと思います。 今回は、遺伝的アルゴリズム(以下、GA)の計算処理をgor... 続きを読む
Go 1.11 のバグと DNS の障害の合わせ技でハマった件 - bearmini's blog
Go で書いたプログラムで、HTTP(S) による通信を行うとなぜか10秒間プログラム (goroutine) がストールして、その後正常に通信が行えるという謎な現象に悩まされ、無事解決できたのでここにメモしておきます。 といっても、解決のためにやったことといえば、Go のバージョンを 1.11.1(バグが修正されたバージョン)に上... 続きを読む
goroutineはなぜ軽量なのか - Carpe Diem
概要 以前の記事で christina04.hatenablog.com golangはスレッドよりはるかに軽量なgoroutineでC10K問題を解決する、という話をしましたが、goroutineが軽量なのはなぜか?という理由を深掘りしたことがなかったのでしてみました。 環境 golang 1.11.1 Darwin 17.7.0 軽量と呼ばれる理由は2つ 大きく分けると以下の2... 続きを読む
Big Sky :: Go 言語の非同期パターン
Go は goroutine という非同期の仕組みを提供していますが、使い方次第では色々なパターンが実装できる為、初めて goroutine を見た人はどの様な物が正解なのか分からない事があります。以前、このブログでも紹介した事がありますが Go の非同期の仕組みは一見単純な様に見えて実はとても奥深いのです。 Big Sky :: golang の channel を使ったテクニックあれこれ go... 続きを読む
Big Sky :: goroutine でドハマリした。
今日たまたま見つけた gotest というプログラムの修正を行った際にドハマリした。 GitHub - rakyll/gotest: go test with colors https://github.com/rakyll/gotest gotest は go test の出力の PASS や FAIL といった定型の文字列を見つけて緑や赤に色付けする小さなプログラム。仕組みも簡単で以下の様なコ... 続きを読む
channelとsync.Poolを使ってgoroutineの同時実行数を制御する - Qiita
元ネタ チャンネルを使って、決まった数のリソースをgoroutine間で共有するパターン - 詩と創作・思索のひろば Big Sky :: 簡単に goroutine の実行個数を制限する方法 どちらも、固定長のバッファを持ったチャネルを共有リソースとすることでgoroutineの同時実行数を制御するパターンの例として紹介されています。 sync.Pool を使うともうすこし可読性があがると思った... 続きを読む
Big Sky :: 簡単に goroutine の実行個数を制限する方法
Go は簡単に軽量スレッドが起動できるのがウリなのだけど、その使い方が難しいと思われているきらいがある。 Goへの誤解について - GolangRdyJp よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事は Goアドベントカレンダー2017 その3 の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね... http://golang.rdy.... 続きを読む
go tool traceでgoroutineの実行状況を可視化する - ( ꒪⌓꒪) ゆるよろ日記
2017 - 12 - 11 go tool traceでgoroutineの実行状況を可視化する こんにちわ。しいたけです。今日はgoroutineの実行状況をいいかんじに可視化するツールの話です。 goのプロファイリングツールと言えば、 runtime/pprof や net/http/pprof ですよね。これらの使い方はググればすぐに出てくるのですが、 詳細なtraceを取得して可視化でき... 続きを読む
【翻訳】goroutine の仕組み - まるまるこふこふ
2017 - 12 - 02 【翻訳】goroutine の仕組み 訳者による概要 Krishna Sundarram 氏の記事「How Goroutines Work」の翻訳です。 「goroutine とは軽量スレッドである」という説明に対して抱くであろう 「どのようにして並行処理を実現しているのか」「既存のスレッド処理と何が違うのか」「なぜ軽量なのか」という疑問を解消する文章です。 とても良... 続きを読む
Goroutineハンターが過労死する前に - Qiita
Goroutineハンター、それは逃げ出したgoroutine達を捕まえるため、日夜戦い続けるエンジニア達のことである。Goroutineハンターは本番環境でOOM Killerが発動するたびに呼び出され、逃げ出したすべてのgoroutineを捕まえるまで家にかえることが出来ない。しかし、あなたが書いた何気ないコードによって、今日もまた新しいgorutine達が野に放たれるのであった。 Gorou... 続きを読む
Big Sky :: Re: Go言語感想文
幾らか言いたい事があったので。 Go言語感想文 - なるせにっき 序 最近、敵情視察を兼ねた仕事ととしてGoでアプリケーションを書いていた。このアプリケーションがどんなものかはそのうち id:tagomoris さんがどこかで話すと思うけれど、この コンポーネント ... http://naruse.hateblo.jp/entry/2017/06/02/203441 GoroutineとChan... 続きを読む
ASCII.jp:Go言語と並列処理(2)|Goならわかるシステムプログラミング
今回は、Go言語の並行・並列処理のかなめともいえるgoroutine(ゴルーチン)周りを掘り下げていきます。 goroutineは、前回の記事で軽く触れたように、 軽量スレッド と呼ばれるものです。 そこで、まずはこの軽量スレッドと通常のOSのスレッドがどう違うのかを説明します。 そのうえで、goroutineの低レベルな機能を扱うためのruntimeパッケージ、 goroutineのデータ競合を... 続きを読む
意外と知らないgoroutineのスケジューラーの挙動 #golang - Qiita
はじめに goroutineはGo言語の大きな特徴である並行処理を支える重要な機能です。 しかし、goroutineの仕組みについてしっかり理解しないままコードを書いてしまうと思わぬ挙動をしてしまうことがあるので注意が必要です。 今回はそんなgoroutineのスケジューリングの挙動についてまとめてみました。 僕自身がgoの書き始めの頃に引っかかった部分なので、初心者のgoroutineへの理解の... 続きを読む
Big Sky :: golang の channel を使ったテクニックあれこれ
golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golang の goroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等... 続きを読む
GopherJSの紹介 - GolangRdyJp
Javascriptを書きたくないでござる!な人向け。 GopherJSってなに? Goの記述を100%Javascriptに変換してくれるツール。 サイト: http://www.gopherjs.org GopherJSの特徴 pure-GoなコードをJSの世界で動くように変換する。 goroutineやchanも論理的に動作するように変換。 外部バイナリ(.soなど)への依存のある実装の変換... 続きを読む
GAE/Goのハマったところ( ・᷄ὢ・᷅ ) - Qiita
2014年は半年くらいGoogle App Engine(GAE)/Goのアプリを書く事に費やすことが出来て、とても幸せな一年でした(^^) GAE/Goはご存知の通りずっとbeta(or experimental)ですが、個人的にはGAEランタイムの中で最強だと思っています。 何よりspin-upが早い!リクエストの処理もgoroutineでシンプルに高速化出来る!GAEアプリ書くならGoを選ば... 続きを読む