Spinach Forest

2015/03/07: Chrome Threading

|

Chrome はマルチスレッドなのだけれど、色々辛い。マルチスレッドがらみのバグはよくコードレビューで指摘されるし(気づくのは大したもんだおともうが)、TSAN (Thread Sanitizer: レースコンディション動的検出ツール) ボットが見つけてくれることもある。でも正直 reason-able なコードが書ける気がしない。皆なんで平気なのか謎。まあ平気じゃないから TSAN みたいなものが必要になるわけだけれど。

スレッド同士で間接的直接的に同じ変数を触ってレースが発生する。根本的にはそういうデザインを強いられるアーキテクチャがまずい。なぜオブジェクトをスレッドに縛り付けてメッセージパッシンする作りにしなかったのか。プロセス同士はそうなってるんだから同じことをすれば良いはずなのに・・・。

何がこのまずいデザインを招いたのか。なぜ人々は頑張れなかったのか。社会的な要素が大きいとわかりつつ、どんなデザインになっていれば平和だったかを想像してみる。

などなど・・・。将来マルチスレッドなコードを書く日が来たら教訓にしたい。

・・・といいたいとこだけど自分じゃこんなコードにならないね・・・。自分はスレッドは人類には早すぎた道具なので近づかずにすむよう(デザインで)全力を尽くす派。日常的にロックをつかって排他制御する Chrome のコードには共感できない。もしかしたらボンクラばかりのチームの方が少数のエリートが決まりを作って守らせたかもしれない。でもそれなりにコード書ける人がその自負でもって各々勝手にコードを書いていくと、さっさと仕事を片付ける最短パス = PostTask() と lock, に収束してしまうのだろうなあ。Chrome は大掛かりなアーキテクチャ的制約みたいのが少ない。それは良いところもあるけど、辛い事もあるね。

それにしてもウェブの世界は非同期かつメッセージングなコードを強制されているのに、その実装がこんな shared state だとは皮肉なものであることよ。たぶん Servo とかはもっとずっとマシなのだろう。ちゃんと UI がついたころに見てみたい。