[#44909] VRDdeClientについて — Toshiyasu Soejima <clev@...2.so-net.ne.jp>

17 messages 2008/05/11

[#44936] yamlとencoding — "Yutaka Kanemoto" <kinpoco@...>

金本と申します。

16 messages 2008/05/14

[ruby-list:44982] Re: 重いタスクと平行にirbを使うと遅い?

From: "takeru sasaki" <sasaki.takeru@...>
Date: 2008-05-31 11:11:03 UTC
List: ruby-list #44982
佐々木です。

IRB.startを先に持ってくるとtaskBをirbから操作できません。

本当にやりたいことはtaskBの進行状況や内部状態を確認したり、タスクの状態を変更したりを
irbから好きなタイミングで自由にやりたいのです。

-----
require "irb"
require "benchmark"


class Task
  attr_reader :count
  JOBS = 10000000
  def initialize(name)
    @name  = name
  end
  def run
    @start = Time.now
    puts "\n#{@name}:%s" % Benchmark.measure{
      @count = 0
      JOBS.times{ @count += 1 }
    }
    puts "task finished. @name=#{@name}"
  end
  def status
    elapse = Time.now-@start
    "name=#{@name} #{(100*@count/JOBS).to_i}%
speed=#{'%f'%(@count/elapse)} count=#{@count} elapse=#{elapse}"
  end
end

$taskA = Task.new("A")
thread1 = Thread.start{
  5.times{
    sleep(1)
    puts $taskA.status
  }
}
$taskA.run

thread2 = Thread.start{
  $taskB = Task.new("B")
  $taskB.run
}

IRB.start
puts "EXIT from irb."


-----


% ruby irb_slow.rb
name=A 26% speed=2652551.441800 count=2672053 elapse=1.007352
name=A 53% speed=2623722.702715 count=5389499 elapse=2.054142
name=A 81% speed=2615815.896775 count=8111530 elapse=3.100956

A:  3.800000   0.010000   3.810000 (  3.829246)
task finished. @name=A
irb(main):001:0> name=A 100% speed=2400890.634390 count=10000000 elapse=4.165121
name=A 100% speed=1854824.379663 count=10000000 elapse=5.391346

irb(main):002:0*
irb(main):003:0* $taskB.status
=> "name=B 10% speed=239556.290150 count=1051368 elapse=4.388814"
irb(main):004:0>
irb(main):005:0*
irb(main):006:0* $taskB.status
=> "name=B 18% speed=222926.040621 count=1833350 elapse=8.224028"
irb(main):007:0>
irb(main):008:0*
irb(main):009:0* $taskB.status
=> "name=B 27% speed=214473.275541 count=2774582 elapse=12.936726"
irb(main):010:0> $taskB.status
=> "name=B 37% speed=208881.120976 count=3792840 elapse=18.157888"
irb(main):011:0>
irb(main):012:0*
B:  5.320000   0.100000   5.420000 ( 52.943583)
task finished. @name=B

irb(main):013:0* exit
EXIT from irb.


2008/05/31 16:54  <rubikitch@ruby-lang.org>:
> From: "takeru sasaki" <sasaki.takeru@gmail.com>
> Subject: [ruby-list:44980] 重いタスクと平行にirbを使うと遅い?
> Date: Sat, 31 May 2008 15:27:15 +0900
>
>> t1 = Thread.start{ task("B") }
>> IRB.start
>
> IRB.startをt1の前に持って行くのはどうでしょうか?
>
> require "irb"
> require "benchmark"
>
> def task(name)
>  puts "\n#{name}:%s" % Benchmark.measure{
>    a = 0
>    200000.times{ a += 1 }
>  }
> end
> task("A")
>
> IRB.start
> t1 = Thread.start{ task("B") }
> puts "EXIT from irb."
> t1.join
> puts "t1 finished."
> # >>
> # >> A:  0.090000   0.000000   0.090000 (  0.092097)
> # >> EXIT from irb.
> # >>
> # >> B:  0.090000   0.000000   0.090000 (  0.097652)
> # >> t1 finished.
> --
> rubikitch
> Blog: http://d.hatena.ne.jp/rubikitch/
> Site: http://www.rubyist.net/~rubikitch/
>
>

In This Thread