[#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

モルと申します。

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

Asakusa.rbのかくたにです。

12 messages 2010/03/31

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

From: Makoto Kuwata <kwa@...>
Date: 2010-03-09 10:36:42 UTC
List: ruby-list #46901
桑田といいます。
Ruby 1.9.2 preview2 で Fiber を試しているのですが、
奇妙な現象に悩まされているので相談させてください。

やっていること:
 (A) FiberをN個作成する
 (B) 配列にN個のデータを追加する
 (C) FiberをN個作成して配列に追加する((A)と(B)を合わせた作業)

困っていること:
 (A)と(B)はすぐに終了するのに、それらを合わせただけのはずの(C)が
 やたら時間がかかる。

実験コード:

----------------------------------------
require 'benchmark'
N = 10000

Benchmark.bm(25) do |bm|

  ## (A) FiberをN個作成するだけ。すぐに終わる。
  bm.report('(A) f = Fiber.new { nil }') do
    arr = []
    (1..N).each do |i|
      f = Fiber.new { nil }
    end
  end

  ## (B) 配列にN個のデータを追加する。すぐに終わる。
  bm.report('(B) arr << i') do
    arr = []
    (1..N).each do |i|
      arr << i
    end
  end

  ## (C) N個のFiberを生成して配列に追加する。なぜか時間がかかる。
  bm.report('(C) arr << Fiber.new{nil}') do
    arr = []
    (1..N).each do |i|
      arr << Fiber.new { nil }
    end
  end

end
----------------------------------------

実行結果:

  $ ruby -v
  ruby 1.9.2dev (2009-07-18 trunk 24186) [i386-darwin10.2.0]
  $ time ruby hoge.rb
                                  user     system      total        real
  (A) f = Fiber.new { nil }   0.060000   0.010000   0.070000 (  0.063906)
  (B) arr << i                0.000000   0.000000   0.000000 (  0.001474)
  (C) arr << Fiber.new{nil}   3.040000   0.070000   3.110000 (  3.131356)

  real    0m3.279s
  user    0m3.123s
  sys     0m0.124s


最初はGCが原因かと思いましたが、そうではないようです。
なおOSはMac OS X Snow Leopard です。
また1.9.1-p378でも結果は同じでした。

なにかヒントになる情報をいただけないでしょうか。
よろしくお願いします。

--
regards,
makoto kuwata

In This Thread

Prev Next