ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

「Goならわかるシステムプログラミング」を読んだ

「Goならわかるシステムプログラミング」の一連の記事をゴールデンウィーク中に読んでました。
ASCII.jp:Goならわかるシステムプログラミング

単純にコーディングしているだけでは意識することが少ない、低レイヤーの話が分かりやすく書かれており、必要になった時に再読したいと思います。

以下、読んでだ時のメモを纏めた(纏まってのか?)、チラシの裏書きレベルのメモとなりますw
再読するときなど、読み直す箇所のあたりを付けるのに使おうかな、と。。。

第1回

デバッガなどの準備。

第2回・3回・4回

io.Writer、io.Readerについて。

https://jibun.atmarkit.co.jp/lskill01/rensai/fulinux/03/01.html

こちらの

Linuxには「ファイルシステム」「プロセス」「ストリーム」という3つの概念

を念頭に読み進めた。

プロセスはGolangで書くプログラムそのものだとすると、ファイルシステムとストリームを取り扱うのが
1~3回で扱っているio.Writer、io.Readerインターフェースとなるか。

なお「ファイル」は普段使うテキストファイルに留まらず、入出力先の全て(標準入力・出力や画面など)を指す。
OSレベルではファイルディスクリプタが指す先であり

POSIX系OSでは、可能な限りさまざまなものが「ファイル」として抽象化されて

いる。(https://ascii.jp/elem/000/001/243/1243667/ より)

第5回

システムコールについて。

第6・7・8・9回

ソケット通信まわりについて。

ソケット通信でもファイルシステムとストリームを取り扱うio.Writer・io.Readerを経由して読み書きしている。
Golangを案件で使っている会社であれば、新人研修でWebサーバを作り、ブラウザやcrulでアクセスしてレスポンスを取得する所をやると理解が深まるかも・・・、など思った。

第10・11・12回

ファイルシステムの様々な扱い方について
fsnotifyとgoルーティンを使ったファイルの変更を監視する例、ファイルをロックする例、など。
同期・非同期・ブロッキング・ノンブロッキングについての分かりやすい説明。

第13・14・15回

プロセス、シグナルについて。
Graceful Restartなどアプリでシグナルを扱う例など。

第16・17・18回

並列処理、「スレッドとgoroutineの違い」、「並列処理のパターン」について。
syncパッケージを使った、様々なgoroutineの制御の具体例。
並列処理を実装する前に再読したい。

第19回

メモリ管理について。

第20回

コンテナについて。
仮想化、コンテナの違い。
Golangでコンテナを実装する例。