📄

Goならわかるシステムプログラミング2版4章読書メモ

2023/02/21に公開

Goならわかるシステムプログラミング2版4章読書メモ

Tony Hoareが提唱したCSP

Go言語はTony Hoareという有名な計算機科学者の提唱した、CSP(Communicating Sequential Processes)というモデルをチャネルという形で実装しました。

知らなかった。面白そうなので後で調べてみる。POSTDにも面白そうな記事があった。

https://postd.cc/go_concurrency_visualize/

チャネルは、クローズしなくてもガベージコレクタに回収されます?

と書いてあったが、それでいいのか?

注釈にstackoverflowのリンクがあったので読むとプログラミング言語Goに記述があるらしい。探すと書かれていた。

ガベージコレクタが到達不可能と判断したチャネルは、閉じられているかどうかに関係なくその資源が回収されます。
(プログラミング言語Go P265)

ガベージコレクタの挙動に詳しくないので、これ以上は立ち入れない。が、とにかくやたらめったら回収するのでなく、到達不可能と判断したら回収するようだ。であれば到達不可能かどうか判断できない状態はありそうな気がするからメモリリークする可能性はあるのでは?と思ったけど、なんとなく、CSPの理論の中で到達不可能かどうか判断できない状況はないということが証明されている気がする。今度調べてみる。

素数判定アルゴリズム

4.2.3の本筋じゃないけど、久しぶりに素数判定アルゴリズム見たら忘れていたから復習しておく。

サンプルコードには、素数判定したい数の平方根までの大きさの奇数を全て走査して、それぞれ割り切れるかどうかを確認するというアイデアが実装されている。

なんで平方根なんだっけ?

N = a * b と記述できるとしたときに、a>bの場合にNbで割り切れるかまで見ればaで割り切れるかどうかまで探索しなくてもよい。つまりa=b=sqrt(N)の場合まで探索すれば十分探索したことになる。という感じだったはず。

Q4.1

time.Timerでチャネルを作って待ち受けるだけ。

https://github.com/roronya/go-system-programming/blob/main/chapter4/Q.4.1/main.go

GitHubで編集を提案

Discussion