RandomThoughts

RandomThoughts

【書籍】ConcurrentProgrammingOnWindows

Contents:
  1. 2023-10-12 (木) 購入
  2. 2023-10-24 (火) Memory Models and Lock Freedomのあたりを読む
  3. 2023-10-25 (水)

Windows

Concurrent Programming on Windows

2023-10-12 (木) 購入

仕事で書いたWindowsのThreadPoolを使ったコードがなんかコアを一つしか使ってないように見えるので、 スレッドプール系の本を手元においておきたいな、と思い購入。 2008年の本で古いが、一方でVista世代の解説はあって、ネイティブ側ではこの辺しか使う気は無いのでまぁいいか、という感じに。

本としては.NETの本という事になっているが、ネイティブの解説は多く、 この時代のスレッドプールとしてはむしろVistaのネイティブの方が良いAPIとうスタンスの解説なので、 ネイティブのスレッドプール周りを知りたい時に悪くない。

Windowsのこの辺の充実っぷりを理解するのには良いのだけれど、 一方で2008年なのでちょっと古いな、と思う所もある。non blocking futureで統一する、 みたいな所を大前提と出来ない時代なので、その辺がなぁ、という感じだ。

2023-10-24 (火) Memory Models and Lock Freedomのあたりを読む

仕事で使う部分は読みおわったのだけど、Windows特有の並列周りのAPIとか知るには良いと思ったので、10章を読む。 LazyInitが命令の順番が変わってうまく動かないみたいな話とか。 まぁここはそんなにWindows特有の話は無いけれど。基本的な内容でどの本でも同じような話ではあるが、 どの本でも同じような話なのでこの本でもいいな、と思わせる程度には良く書けている。

ただやっぱりちょっと古いな、と思う。C++の11周りとWIndowsの関連が書いてあるといいのになぁ。thread_localのデストラクタがどうなっているかとか。 なお、.NETの話はいらないなぁ、と思う。なんかこの2つを一つの本に入れるのは失敗なんじゃないかな、と思う。

読んでいて思うのは、並列の本って並列の問題説明して基本的なコンテナとかの話をして終わり、 みたいなのが多いのだけれど、本当に必要なのは様々な問題でスレッドの同期が必要になってしまう問題をどう無くすか、 みたいなノウハウなんじゃないかなぁ。 少なくとも自分が求めているのはそういうのなんだよなぁ。

2023-10-25 (水)

11章のConcurrency Hazardのあたりは教科書的な内容が書いてあるだけで、避けるプラクティス的な事も言及するとかいいつつほとんどそういうのは無かった(ロックの順番に気をつけましょう的なのしか無い)。後半は飛ばし読みした。 10章の次は12章で良かったなぁ、と思いつつ、12章を読み始める。 12章と13章だけ読んで他の本に行きたい。

12章を読んでいたが、C#の例ばかりな所が多くて、しかもC++には翻訳出来なさそうなのが多くて自分の用途には合わないのでここらで読むのをやめるかな。 もう少しパラパラ進めるといくつかはC++の例もあったが、簡単なヤツだけでうーん、という感じだ。 なんかオブジェクトをlockに使う例はそのままじゃ実装出来ないよなぁ。

という事でWindowsの並列プリミティブについては良く書けていると思うけれど、.NETとC++を両方扱うのがC++視点ではいろいろ足りなくていまいち、というのがこの本の印象かな。

手元に持っておいて並列関連のAPIを調べるのに使う、くらいの用途はちゃんと満たしているので、まぁいいか、という感じはする。 C++は古いがWindowsのAPIはVista以後ではあるのでこのくらいの時期でも自分の用途には十分かな。