なっとく!並行処理プログラミング ======================== # 2章を読んだ *2026-03-24* ➤ 直列実行と並列実行 やけに眠くなる。わかりやすはずなのになぜかしっくりこない。 並列処理と並行処理を明確に区別すること。 # 3章を読んだ *2026-03-28* ➤ コンピュータの仕組み 主な関心の対象は並列化されたCPUとGPU、そしてメモリアクセス。 とても基本的な内容ではあるけど、きれいに整理されていて全体像のイメージを構築する助けになる。 # 4章を読んだ *2026-03-28* ➤ 並行処理の構成要素 プロセスとスレッド。 素晴らしくわかりやすい。 並行処理は難しいが、恐れる必要はない。 「毛糸の入ったカゴに入った子猫を思い浮かべてみよう。子猫は好奇心旺盛で、物怖じせず、遊び盛りである。子猫にとって、毛糸の入ったカゴなど恐れるにたりない。」 # 5章を読んだ *2026-03-28* ➤ プロセス間通信 IPC (Inter Process Comunication) とよく知られた名前がある。 名前は十分に定着しているけど、経験が乏しいので有効活用できたことはない。 設計での選択肢にすら入ったことがない。 この章で扱っているのは、実際のOSの管理単位としてのプロセスではなくて、抽象的な実行単位として、タスク(要はプロセスとスレッドの両方)を指している。 複数のタスク間でどうやってリソース(データ)を通信(送受信)するか。 - メッセージパシング - パイプ: 名前付きパイプ(FIFO)と名前なしパイプがある。 - メッセージキュー - UNIXドメインソケット - よく使われる実装パターン → Thread Pool パターン どれも長所と短所があり、向いている場面とそうでない場面がある。 十分に実験をして、その性質に慣れ親しんでおく必要がある。 # 6章を読んだ *2026-03-30* ➤ マルチタスク OSを基本とした話になっている。 必ずしもOSに限定されるわけではないけど、どのようにしてOSがマルチタスクを実現しているかを意識していた方がずっとイメージしやすい。 ゲームの例はあまり現実的ではないし、適切でもない。 - ユーザー入力取得 - ゲーム状態の更新 - 描画 これは典型的なゲームループの処理。 通常は逐次的に処理される。 これをマルチタスク的に処理しようという例で、不用意にそんなことをしたら間違いなくめちゃくちゃになる。 ただ、どうやったら本当にそれを実現できるのか、何か得るものはあるのか、考察としてはちょっと面白いかもしれない。 # 7章を読んだ *2026-04-25* ➤ 分解 少し時間が空いた。 再開する。 前のことは忘れかけている。 MIMD と MISD (P117) 読み終わった。 難しいことを言っているわけではないけど、いまいちピンとこない。 # 8章を読んだ *2026-04-25* ➤ 並行処理問題の解決:競合状態と動機 基本、用語と概念の説明のような内容だった。 実践的ではない。 クリティカルセクション。 ロック (ミューテックス、セマフォ)、アトミック。 # 9章を読んだ *2026-05-01 03:46:12* ➤ 並行処理問題の解決:デッドロックと飢餓状態 デッドロック、ライブロック、飢餓状態。 プロデューサー/コンシュマー問題、リーダー/ライター問題。 同期処理のところでなぜか止まっていた。 かなり間が空いた。 書いてある事自体はそんなに難しくなかった、はず。 さらっと前を読み返したところ、ライブロックについてイメージが定着していないことが分かった。 # 10章を読んだ *2026-05-01 04:33:37* ➤ ノンブロッキング I/O どのようにループが回るのか、イメージが定着していない。 Luaのコルーチンを練習するといいかもしれない。 # 11章を読んだ *2026-05-01 10:04:02* ➤ イベントベースの並行処理 難解。 同期/非同期、ブロッキング/ノンブロッキングのイメージができない。 実例が不足している。 # 12章を読んだ *2026-05-01 10:50:28* ➤ 非同期通信 流した。 現実のケースに結びつかないため、精神的にきつい。 キーワード: ユーザーレベルのスレッド # 13章を読んだ *2026-05-01 11:50:52* ➤ 並行処理アプリケーションを作成する 流しただけ。 読めなくはなさそうだった。 # エピローグを読んだ *2026-05-01 11:51:09* ちゃんと理解しながら読んでいたら、基礎はできているらしい。 一方で、この領域の入口付近にいる程度にとどまることは認めなければいけない。 あとはたくさん経験を積むこと。