akasaka_34の日記

ネトウヨと呼ばれた男の日記。しかし頻度から言えば週報ぐらい。

フリーランチの余韻とその後に来るもの

マルチスレッドプログラミングにおける
デッドロックやライブロックは厄介だ。
あれを厄介じゃないって言う人は
メモリリークも
「ちゃんと管理すればいいだけじゃん」
って言うタイプだろう。立派ではあるが少数派だ。

マルチスレッドというのは
処理が並列化されてなくて切り替えながら実行してた頃は
少なくとも実行効率は良かったと思う。

でも処理が並列化されるようになってくると
メモリ全体が共有されていると仮定しなきゃいけないことが
効率化を制限するようになる。
そもそもキャッシュもメインメモリもそれぞれ1個しかなかったら
共有ってのはあるがままの状態なのだけど
数が増えれば共有するための工夫が要る。

一方、関数型とかアクターモデルのようなやり方は
「誰かがこのデータを勝手に書き換えたりしない」
って保証しやすくて
これはプログラマにもハードウェアにも優しい。

と、ゆーわけで
将来、マルチスレッドプログラミングは
廃れるような気がしてならない。
そしてもしそうだとすると
今流行りのマルチコアも道連れになると思う。
あれはマルチスレッドのためのハードウェアだ。

補足:
volatileとか書かないと共有されないみたいなルールで
効率を高めることはできるんだけど
それはプログラマの負担になるし
volatileって書くと常に共有され続けることになるってのは
相変わらず性能を制限するはず。
要は値を渡したいだけなのに変数を共有するってのが
根本的な問題なのだと思う。

補足2:
マルチコアだけどキャッシュコヒーレンシとか気にしないってのも
ありなのかもしれんけど
「今流行りのマルチコア」
ってのはそういうのじゃないタイプのこと。

補足3:
ただしマルチスレッドプログラミングに慣れたプログラマが
「関数型とかよりこっちのが楽だ」
って言う可能性はある。
でも個人的な意見を言わせてもらえば
人間はデッドロックやライブロックには慣れない。