読者です 読者をやめる 読者になる 読者になる

マルチスレッドクイズ

あるインタプリタで提供されるスレッドが、並行か並列かを確かめたい*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を増やしたときに速くなるかどうかが知りたいのです