第4回 Data-Oriented Programming 読書会
- JavaEE勉強会の読書会
- 開催場所はDiscordのjavaee-study-jp
- 今回
- 6章の途中から8章まで
- 次回
- 第5回 Data-Oriented Programming 読書会 - connpass
- 9章から
- 2023/2/18(土)
- 参加者トピック
- ディスカッション
- 6.3 Unit tests for queries
- 6.4 Unit tests for mutations
- Chapter 6. Moving Forward (ストーリーパート)
- Part 2. Scalability (ストーリーパート)
- 7.1 Data validation in DOP
- 7.2 JSON Schema in a nutshell
- 7.3 Schema flexibility and strictness
- 7.4 Schema composition
- 7.5 Details about data validation failures
- 7. Summary
- 8 Advanced concurrency control
- 8.1 The complexity of locks
- 8.2 Thread-safe counter with atoms
- 8.3 Thread-safe cache with atoms
- 8.4 State management with atoms
- 8. Summary
- 参考情報
参加者トピック
- Multiplayer Game Development in Rustを購入した
- Rustのゲーム開発本
- 7人中2人が買っていた
- O'Reilly Japan - ソフトウェアアーキテクチャ・ハードパーツ を読み返したり、判断する場面が増えてきた
- 子供の頃に数日かけて一般道で里帰りする体験が良かったので、自分の子供にも体験してもらった
- ただ移動するだけじゃなくてすごい
- ja - ROS Wikiのキャッチアップをしたり、壊れてるOSSを直したりしてる
- 実行環境に対応したPhthonのコードテンプレートを生成するテンプレートを読み解くのが大変だった
- Humble Bundle | game bundles, book bundles, software bundles, and more で電子書籍をまとめ買いしたりした
ディスカッション
6.3 Unit tests for queries
文字列で比較するのをやめて、デシリアライズしたデータを比較する
6.4 Unit tests for mutations
ラッパー関数が多いときは末端の関数からテストを作る
Chapter 6. Moving Forward (ストーリーパート)
- テオは開発がスケールしないという理由でDOPを採用しないつもりになっている
- ジョーはそれを引き留めるため、オフィスで会話することにした
Part 2. Scalability (ストーリーパート)
- DOPで作り直したプロトタイプには課題がある
- 汎用的なデータ構造のため、開発者が増えると困ってしまう
- 同時実行制御はスレッド安全ではない
- structural sharingの仕組みはデータが複雑になると性能が悪くなる
- どの課題もDOPを採用する妨げにはならない
- DOPの理解を深めるために次のレッスンを始めよう
7.1 Data validation in DOP
- データ表現とデータスキーマを分離する
- システム境界を越えるデータの検証
- システム内部で予期せぬデータが生まれてしまう可能性が減る
- システム内部のデータの検証
- コードベースが大きくなってもコーディングが容易になる
7.2 JSON Schema in a nutshell
7.3 Schema flexibility and strictness
(感想)データ表現とデータスキーマを分けるという考え方は、同期や共有、後方互換性を保証するためのコストがかかるので、メリットよりデメリットが上回りそう
7.4 Schema composition
anyOf
や allOf
は便利そう
7.5 Details about data validation failures
7. Summary
- システム境界でデータを検証し、境界の内側におかしなデータが入ってこないようにする
- 開発環境ではシステム協会の内側でもデータを検証する
- 名前の間違いを見つけたりできるので、開発の役に立つ
8 Advanced concurrency control
アトム
というロックフリーな仕組みで並行処理を制御する- デッドロックを回避するために必要なロックの通常の複雑さは、アトムには適用されない
8.1 The complexity of locks
- 不変データなら、読み取り中に他のスレッドが書き込みしても、一貫性は保たれる
8.2 Thread-safe counter with atoms
mutex
を隠しているだけで特にいいことはなさそう- 解放忘れを避けられるし、CAS操作はCPUレベルの命令なので安心
8.3 Thread-safe cache with atoms
突然インメモリーキャッシュの話題になっていてよく分からない
8.4 State management with atoms
- メッセージキューで操作を直列化するやり方に対するメリットは?
- 扱うデータが複雑でも性能が劣化しないように思われる
8. Summary
- GitHub - maxcountryman/atomos: Atomic primitives for Python. が紹介されているけど5年くらい更新されてないので不安
java.util.concurrent
にインスパイアされたライブラリだった