マルチスレッドクイズ
あるインタプリタで提供されるスレッドが、並行か並列かを確かめたい*1。次のような方法で確かめられるか?
二つ以上CPUの乗った計算機を用意して(デュアルコアのCPUを用意して)、二つのスレッドでそれぞれ無限ループするプログラムを実行する。例えばOCamlのバイトコードインタプリタがどうなっているか調べたかったら、次のようにする。
$ cat > hoge.ml let loop n = while true do Printf.printf "Thread %d\n" n; done let () = let tid1 = Thread.create loop 1 in let tid2 = Thread.create loop 2 in Thread.join tid1; Thread.join tid2 ^D $ ocamlc -thread -o hoge unix.cma threads.cma hoge.ml $ ./hoge > /dev/null & $ topこのとき、CPUの利用率が100%を越えていれば(つまり二つのCPUを利用していたら)、並列。100%未満なら、並行。
*1:微妙な表現ですが、CPUを増やしたときに速くなるかどうかが知りたいのです