マルチスレッドクイズ

前のエントリのやつ。答えは「そんなのわからない」です。

OCamlのスレッドは、同時に実行されるのは一つだけです。さっきの方法が正しければ、プログラムを実行したときには、CPUの利用率は100%以下になるような気がします。

で、まあ実際に試してみたら100%超えちゃって、ちょっと混乱したりしました。

ループの中でPrintfしてるのがポイントで、あこを()だけに変えれば、100%になります。多分、C言語のランタイムとかでは普通のpthreadのプログラムと同じになって、同時に実行されてるんじゃないかと思います。「pthreadを利用しているのでCのランタイムなどは同時に実行されるが、OCamlプログラムでは同時に実行できるスレッドは一つだけ」というのはPythonでも同じという話を聞きましたので、多分Pythonでも同じような挙動を示すんじゃないかと思います。


ちなみに、プログラムの挙動からその処理系のThreadの種類を判別するにはどうすればいいかというのは、ちょっと面白いクイズだと思ったのですが、なんか難しそうです。時間を計るというのも一つの手だと思うのですが、適当にやるとマルチスレッドの方が遅くなったりとか平気でするので、よくわかんないや。なんか、いい方法あるんでしょうかね?