[#46878] ML への投稿が blade.nagaokaut.ac.jp 以外にも — "ISHIKAWA Takayuki" <rechka_osaka@...>

石川と申します。この ML へ投稿した e-mail が

10 messages 2010/03/03

[#46909] gemを実行すると大量のワーニングメッセージ — garyo hosu <garyohosu@...>

こんにちはgaryoといいます。

16 messages 2010/03/16
[#46910] Re: [ruby-list:46909] gemを実行すると大量のワーニングメッセージ — Moru <lateau@...> 2010/03/16

44Oi44Or44Go55Sz44GX44G+44GZ44CCCuOBvuOBmmdlbeOBruODkOODvOOCuOODp+ODs+OCkuei

[#46911] Re: gemを実行すると大量のワーニングメッセージ — garyo hosu <garyohosu@...> 2010/03/16

モルさん。さっそくありがとうございます。

[#46983] Ruby Summer of Codeのアイデアとかメンターについて — Shintaro KAKUTANI <shintaro@...>

Asakusa.rbのかくたにです。

12 messages 2010/03/31

[ruby-list:46902] Re: Fiberに関する現象について

From: Yusuke ENDOH <mame@...>
Date: 2010-03-09 11:07:01 UTC
List: ruby-list #46902
遠藤です。

2010年3月9日19:36 Makoto Kuwata <kwa@kuwata-lab.com>:
> やっていること:
>  (A) FiberをN個作成する
>  (B) 配列にN個のデータを追加する
>  (C) FiberをN個作成して配列に追加する((A)と(B)を合わせた作業)
>
> 困っていること:
>  (A)と(B)はすぐに終了するのに、それらを合わせただけのはずの(C)が
>  やたら時間がかかる。
>
*snip*
>
> 最初はGCが原因かと思いましたが、そうではないようです。


どうやって確認したのかわかりませんが、やはり GC が原因のようです。

$ ./ruby -e '
  N = 10000
  a = []
  t = Time.now
  GC::Profiler.enable
  N.times do
    a << Fiber.new { nil }
  end
  p Time.now - t, GC::Profiler.total_time
'
2.288473015
2.196138

つまり、実行時間 2.3 秒中の 2.2 秒が GC にかかっています。

# GC::Profiler.total_time 便利だ!


Fiber はマシンスタックを片っぱしから mark するため、存在するだけで
GC 的に遅いです。
(A) の場合は生成された Fiber が順次回収されていくため問題にならない
ですが、(C) の場合は Fiber への参照があって回収できないためどんどん
遅くなっていきます。

回避方法はちょっと思いつきません。すみません。

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next