kowさんは天ざる大好き

創作に絶望すると、世界が反転した日記

マルチスレッドの悪夢 in D言語

ここ一ヶ月デバッグし続けて、目標の応答性を達成しつつ、スレッドセーフにするのがうまくいっていない。

一度は、とりあえず全部にsynchronizedをつけて、スレッドセーフを確認して、どのsynchronizedをとればいいかと考えた。
すると、こんどは、いろんな機能が分離されてなくて、これはこっちに分離しないとパフォーマンスがでなくて、その機能をそのメソッドからとると、今度はあっちの機能が満たされなくなって...


yaneSDK4Dが一度、synchronizedだらけになって、生存性すら危ぶまれたわけだ。


とりあえず、いま、ソースをリポジトリからとりなおして、シングルスレッドにした。
まあ、とりあえず、安定が一番で初心にもどって、じっくり整理することにした。
マルチスレッドプログラミングはコードを書く前に、頭でごにょごにょしないといけないんだあ。
はじめてのまるちすれっど、体験談。
さらには、この頭で考える作業。マルチスレッドとかシングルスレッドの問題だけでなくて、わたしのコーディングスタイルに問題を提起しているし、考えもせずコードを書き始める悪い癖によって、バグを濫発しているという事実を突きつけられた。
よし、まずは考えてからだ。。。


あと、
ガベージコレクションは速い!
という命題をどうしてもまだ信じられない。
スマートポインタよりいいとか、実行ファイルサイズが小さくなるのでキャッシュに入る割合が多くなるとかいわれてもなあ。
すでに、クラスが爆発している状態で、実行ファイルサイズは1.5MBもあるし、ガベージコレクタが動いてもOSにメモリを帰さないので、本当のメモリ使用量がタスクマネージャでみれない。
タスク切り替え時に、メモリ回収してるんだけれど、一度も終了せずに、最後までシナリオを読んだら、std.gc.fullCollectで3,4秒は待たされる。
遅いメモリ&遅いCPUだとこのメモリ回収してる時間はバカにできない。
これって、OSからとってきたメモリをすべてスキャンするっていうことなのだと思うので、newすればするほど、どんどん時間がかかっていくんだろう。かといってnewしないわけにいかないしなあ。


最近、百単位で拍手してくれる方、本当にありがとうございます。
あと、
0 22 * * * root /home/hakusu.sh
で毎日拍手投げてくれる方、ありがとうございます。(CRONはウソです...)
こうやってkow@suhitoはフライタイプのカップ麺でがんばってプログラミングしてます。
期待しておられる方には、世の中にはおもろい作品がいっぱいあるのだから、もっともっとおもろいものをやってみるといいな、と思いますです。