著作一覧 |
> 仕組み上、テストがメインスレッドではないスレッドで実行される
これは違って、テストの入出力の受け持ちがワーカスレッドで、テストそのものはメインスレッドで実行される(と読めるんだけど自信なし)。
(parallel.rbでスレッド作ってるのはここ) th = Thread.new do begin while buf = (self.verbose ? i.gets : i.read(5)) @stdout.puts "p #{[buf].pack("m").gsub("\n","")}" end rescue IOError rescue Errno::EPIPE end end
でも、いずれにしてもGCはどのスレッドでも起動されるので、オブジェクトを生成したのではないスレッドで回収に入ることがあるのは間違いない。
不思議なのは、-j 1で実行するとほぼ完走することが多い(死ぬこともある)。でも、-j nでnが大きいほど、個々のプロセスで実行するテストは少なくなるはずだから、これは不思議(当然、GCの頻度も下がるはずだし)。
では、なんで死ぬのかと言えば、やはりスレッドの存在としか思えない。
で、以前作ったGITのやつを引っ張り出して来たら、ほぼ死ななくなったようだけど、イベントの処理エラーテストに引っ掛かる。理解不能なところに入り込んでしまった。
さてではどうしようかなぁとか。
ジェズイットを見習え |