Enviar búsqueda
Cargar
goroutineはどうやって動いているのか
•
Descargar como PPTX, PDF
•
2 recomendaciones
•
4,210 vistas
ota42y
Seguir
https://shinjukurb.connpass.com/event/91172/ の発表資料です。
Leer menos
Leer más
Ingeniería
Denunciar
Compartir
Denunciar
Compartir
1 de 34
Descargar ahora
Recomendados
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
NTT DATA Technology & Innovation
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
Recomendados
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
NTT DATA Technology & Innovation
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
Insight Technology, Inc.
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
Jun Kato
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
富士通クラウドテクノロジーズ株式会社
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
目grep入門 +解説
目grep入門 +解説
murachue
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
ロードバランスへの長い道
ロードバランスへの長い道
Jun Kato
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Hironobu Isoda
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
5分で分かるgitのrefspec
5分で分かるgitのrefspec
ikdysfm
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
MF GeeksNight pplogの話
MF GeeksNight pplogの話
Naoto Koshikawa
なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話
ota42y
Más contenido relacionado
La actualidad más candente
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
Insight Technology, Inc.
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
Jun Kato
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
富士通クラウドテクノロジーズ株式会社
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
目grep入門 +解説
目grep入門 +解説
murachue
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
ロードバランスへの長い道
ロードバランスへの長い道
Jun Kato
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Hironobu Isoda
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
5分で分かるgitのrefspec
5分で分かるgitのrefspec
ikdysfm
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
La actualidad más candente
(20)
Pythonによる黒魔術入門
Pythonによる黒魔術入門
できる!並列・並行プログラミング
できる!並列・並行プログラミング
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
メタプログラミングって何だろう
メタプログラミングって何だろう
Docker Compose 徹底解説
Docker Compose 徹底解説
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
Twitterのsnowflakeについて
Twitterのsnowflakeについて
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
目grep入門 +解説
目grep入門 +解説
冬のLock free祭り safe
冬のLock free祭り safe
ロードバランスへの長い道
ロードバランスへの長い道
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
5分で分かるgitのrefspec
5分で分かるgitのrefspec
イベント・ソーシングを知る
イベント・ソーシングを知る
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
分割と整合性と戦う
分割と整合性と戦う
Similar a goroutineはどうやって動いているのか
MF GeeksNight pplogの話
MF GeeksNight pplogの話
Naoto Koshikawa
なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話
ota42y
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
ota42y
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
ota42y
Git超入門
Git超入門
Shun Nishitsuji
JobScheduler Code Reading
JobScheduler Code Reading
Shinobu Okano
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう
中條 剛
Gitoriousをubuntu 10.04 LTSへインストール
Gitoriousをubuntu 10.04 LTSへインストール
Kiyoshi SATOH
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
ota42y
Mruby and microcomputer_board
Mruby and microcomputer_board
Hara Yoshihiko
omotesando.rb_20231005.pdf
omotesando.rb_20231005.pdf
瑛一 西口
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例
Naoto Koshikawa
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Tsuyoshi Yamamoto
とある Perl Monger の働き方
とある Perl Monger の働き方
Yusuke Wada
5人と5万円で 2人が救えた話
5人と5万円で 2人が救えた話
Mahito Ogura
5分で資料作ってSlideShareにアップロードする錬金術
5分で資料作ってSlideShareにアップロードする錬金術
Shinobu Okano
コミュニティのある風景
コミュニティのある風景
Ryunosuke SATO
Similar a goroutineはどうやって動いているのか
(20)
MF GeeksNight pplogの話
MF GeeksNight pplogの話
なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営を同時にやった話
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
Git超入門
Git超入門
JobScheduler Code Reading
JobScheduler Code Reading
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう
Gitoriousをubuntu 10.04 LTSへインストール
Gitoriousをubuntu 10.04 LTSへインストール
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
Mruby and microcomputer_board
Mruby and microcomputer_board
omotesando.rb_20231005.pdf
omotesando.rb_20231005.pdf
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
とある Perl Monger の働き方
とある Perl Monger の働き方
5人と5万円で 2人が救えた話
5人と5万円で 2人が救えた話
5分で資料作ってSlideShareにアップロードする錬金術
5分で資料作ってSlideShareにアップロードする錬金術
コミュニティのある風景
コミュニティのある風景
Más de ota42y
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点
ota42y
マイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャ
ota42y
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ota42y
FiNCでのOSSとのつきあい方
FiNCでのOSSとのつきあい方
ota42y
CarrieWaveについてざっくり解説
CarrieWaveについてざっくり解説
ota42y
prmdのドキュメントが読みやすくなる話
prmdのドキュメントが読みやすくなる話
ota42y
身近なサイバー攻撃から身を守る
身近なサイバー攻撃から身を守る
ota42y
HCI分野の紹介と最新研究
HCI分野の紹介と最新研究
ota42y
Más de ota42y
(8)
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点
マイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャ
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
FiNCでのOSSとのつきあい方
FiNCでのOSSとのつきあい方
CarrieWaveについてざっくり解説
CarrieWaveについてざっくり解説
prmdのドキュメントが読みやすくなる話
prmdのドキュメントが読みやすくなる話
身近なサイバー攻撃から身を守る
身近なサイバー攻撃から身を守る
HCI分野の紹介と最新研究
HCI分野の紹介と最新研究
goroutineはどうやって動いているのか
1.
ota42y 2018/06/26 Shinjuku.rb #62 goroutineは どうやって動いているのか
2.
• ota42y • サーバサイドエンジニア •
rubyとかrustとかgoとかC++とか • Twitter、github → ota42y • 技術書典4でマイクロサービス本を出した – https://ota42y.com/blog/2018/04/10/mi croservices_yorozu_book/ 自己紹介
3.
goroutine
4.
• go func
で関数を非同期にする凄いヤツ • 簡単すぎて内部で何をやっているか謎 →内でどう動いているか調べた goroutine
5.
• goroutineはプロセッサ数に応じて適切に 分散されて動く • スレッドを作りすぎないよう上手くやる •
基本はwork-stealingアルゴリズム 結論
6.
goroutineは何をするか
7.
• このコード goroutine開始時
8.
• こんな感じになる • newprocに関数を渡してそう •
newprocはnewproc1をほぼ読んでるだけ • `go` の中身はnewproc1っぽい goroutine開始時
9.
newproc1
10.
newproc1 (´・_・`)
11.
Design doc • スケジューラのDesign
docがある – https://golang.org/s/go11sched – おそらくgo 1.1? • 大きくは変わって無さそうなので適応できる
12.
goroutineのスケジューラー • 登場人物は3つ – P •
Processor – M • Thread – G • gorutineに渡された関数
13.
goroutineのスケジューラー • 登場人物は3つ – P •
Gを処理していくプロセッサ • GOMAXPROCSの数だけPがある – M • 特定のPに紐付いている – G
14.
goroutineの登録 G P M G Gは発行されると キューに入る head
15.
goroutineの登録 G P G M PはGを取り出してMに くっつけて実行する head
16.
goroutineの登録 G P M G PはGを取り出してMに くっつけて実行する head
17.
goroutineの登録 G P M G M Mが待ちになるとPは 別のMを処理する (syscallとかロックとか) head
18.
goroutineの登録 P M G M G Mが待ちになるとPは 別のMを処理する (syscallとかロックとか) head
19.
goroutineのスケジュール
20.
goroutineのスケジュール G P M G G P M 複数Pが存在する場合 head
21.
goroutineのスケジュール G P M G G P M 複数Pが存在する場合 →デッドロックが起きる 並列数を増やしても性 能を上げられない head
22.
goroutineのスケジュール G P M G P M Pごとにキューを持つ GG
23.
goroutineのスケジュール G P M G P M Pごとにキューを用意 →自分のキューから取る ことでデッドロック回避GG
24.
goroutineのスケジュール G P M G P M P間でGの量に差が出る あるPは急がしいが 別のPは暇の場合がある 適切な負荷分散が必要
25.
work-stealing
26.
• 暇なworkerが、別のworkerからjobを stealする(盗む)アルゴリズム • 中央の管理者無しで良い感じにjobが分散 するらしい •
別workerへのアクセス回数が少なく 競合が発生しにくい work-stealing
27.
work-stealing G P M G P M キューからGが無くなる
28.
work-stealing G P M G P M キューからGが無くなる 別Pのキューにアクセス
29.
work-stealing G P M G P M キューからGが無くなる 別Pのキューにアクセス 中身を半分奪う
30.
work-stealing G P M G P M 普段は自キューを使う →デッドロック回避 空になったときだけ奪う →他キューへのアクセス は少ない
31.
work-stealing G P M G P M キューがあふれたときに 半分globalキューに詰む globalキューは両端キュー 先にglobalキューから stealする G
32.
• goroutineは関数をキューに積むだけ • スケジューラがプロセッサ数に応じて適 切に分散される •
基本はwork-stealingアルゴリズム • スレッドも良い感じに使い回す まとめ
33.
• 両端キューではなく片側キューを使ってる – タブンネ –
両端キューだとより性能が良いはず • 先頭から取り出して後ろから盗む • headを触るのはその所有者のPのみ – キューの実装が循環キューなのが関係している? • メモリ消費かも(両端キューのほうが消費量多いはず) • Pを移動するさいのメモリの扱いとか – もうちょっとdeepに踏み込むのが必要そう わかんなかったこと
34.
• https://golang.org/s/go11sched • https://github.com/golang/go/blob/0 a7ac93c27c9ade79fe0f66ae0bb81484 c241ae5/src/runtime/proc.go •
https://rakyll.org/scheduler/ 参考資料
Notas del editor
この中に、マイクロサービスアーキテクチャを知ってる人どれくらいいますか? ありがとうございます、以外と少なくて資料作った会がありました…
Descargar ahora