読者です 読者をやめる 読者になる 読者になる

KazuminEngine

プログラマーの日記

第2回 golang 勉強会 in Okinawa Log

こんにちは、かずみんです。

第2回 golang 勉強会 in Okinawa を開催してきたので、簡単にlogを残そうかと。

okinawa-go.doorkeeper.jp

あんまり、丁寧に書くつもりはない^^;

モクモク会(広島風

基本的にモクモクな雰囲気でした。

お互いすでに知り合いな感じでモクモクと。

package作ってる人、チュートリアル作ってる人、hugoやってる人、がいました。

私は、golangレベルのschedulerについて調べてました。

github.com

deep driveするはずだったが、入り口見つけただけで終わりました。

なんせ、英語でも記事が少ないわけで、、、、

compilerも結構読みやすいよ。 記事とコードを読み合わせれば、結構わかりそう。

適当に自分にしかわからない作業logを載せる



# n:m scheduler

古いがこの記事を読む -> https://morsmachine.dk/go-scheduler
あまりスケジューリングのことが書いてない -> https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sLKhJYD0Y_kqxDv3I3XMw/edit#
n:kernel space scheduler
m:user space scheduler

* そもそも何で必要?

->  the Go garbage collectorが動いている時に、他のgolang プログラムは待たなくてはいけないから

* 三つの登場人物

- M...OS level thread
- P...context switch for scheduling
- G...goroutine

context switchの数は、start up時にGOMAXPROCにより決定する

一つのMにrunqueがある。そこにgoroutineが後ろから追加されていく


LockOSThread...実行するthreadを固定したい時に使用する


実行可能なgoroutineが作成されると、runqueueにpushされる
goroutineの実行が終了すると、
goqueueが他のgoqueueのgoroutineを半分盗む


goのスケジューラーはプリエンプティブらしい

2時48分にいい記事見つけた -> http://www.cs.columbia.edu/~aho/cs6998/reports/12-12-11_DeshpandeSponslerWeiss_GO.pdf


残り1時間ぐらい。英文なので、読むのに時間がかかるので、図を見た。(怖い

githubでgoのコンパイラであるgccgoのコードを眺めた。

こいつ読めばわかるんじゃないかなー↓

https://github.com/golang/gofrontend/blob/8edf085a94579bd819a10f50328233812ceeb950/libgo/runtime/proc.c#L1813-L1859

知識がないので、変数の可読性が.........

こいつが優先順位をつけるためにgoroutine structに情報を添付?
https://github.com/golang/gofrontend/blob/8edf085a94579bd819a10f50328233812ceeb950/libgo/runtime/proc.c#L2304-L2371


runtime_gogo関数でcontextとgoroutineをつなげている感じとエスパー

LT

私は、

www.slideshare.net

修正。パッケージの内部変数が、他のpackageの関数の挙動を変更する場合があるでした^^

blank importの説明が伝わらなかったですね。(私もあまり理解していないところがあって ...

機能と使用例をごっちゃにしちゃった感じがある。

もう一回、勉強し直して、blogにまとめるといいかもねー

  • LT資料は、勉強会中で作成するのが正解かも

アットホームなLTをすればいいのに、イメージトレーニング通りにやちゃって、

KY感あった。

んで、

LTも、聞いてる方の会話なんだなー。と実感(かなり大事

次回

まだ決めてない。 絶対やりますが、2,3か月ぐらいかなー