这个我也能教.囧.
感谢安道,必须分子呀!
哎,跟二十来岁的小年轻差距好大。
在上海么?周末可以组织个结对编程啊。一起讨论学的快点。
个人网站做的很棒啊。
牛啊。。
为什么我这边测得跟楼主测得完全不一样。看得我云里雾里,哪位大神解释下。
require 'benchmark'
def multiple_threads
count = 0
threads = 4.times.map do
Thread.new do
2_500_000.times { count += 1}
end
end
threads.map(&:join)
end
def single_threads
time = Time.now
count = 0
Thread.new do
10_000_000.times { count += 1}
end.join
end
Benchmark.bm do |b|
b.report { multiple_threads }
b.report { single_threads }
end
user system total real
0.820000 0.000000 0.820000 ( 0.822396)
0.520000 0.000000 0.520000 ( 0.518962)
require 'benchmark'
require 'net/http'
def multiple_threads
uri = URI("http://www.baidu.com")
threads = 4.times.map do
Thread.new do
25.times { Net::HTTP.get(uri) }
end
end
threads.map(&:join)
end
def single_threads
uri = URI("http://www.baidu.com")
Thread.new do
100.times { Net::HTTP.get(uri) }
end.join
end
Benchmark.bm do |b|
b.report { multiple_threads }
b.report { single_threads }
end
user system total real
0.460000 0.130000 0.590000 ( 2.501665)
0.400000 0.070000 0.470000 ( 2.867489)
买买买。
哈希可以帮你解决。。
听不懂。。哎。。。
666
好多收藏癖啊。作者都说了 千万别读。。那只能拿来收藏了。
先赞后学习!
感谢
写的真好,新手都该多学学这些最佳实践!
#7 楼 @tesla_lee 还有一个 300 行+的 if else。其实我对写着代码的人还挺佩服的,能写这么长的 if else 说明对逻辑一清二楚。不过对于维护的人来说确实很残忍。
看着这代码一点也不 ruby,可是水平有限,想不出好的重构方法。大神们给点建议也好。谢谢。
#6 楼 @flemon1986 文档没问题吧?是楼主理解有误。
光一个比较函数就这么麻烦,感觉这才是制约 ruby 发展壮大的因素吧,太复杂。。
#6 楼 @Niatruc 没懂你的意思,第一种情况 f1,f2 object_id 一样呀。第二种情况不同。然后我又进一步分析了一下。
i=0
p i.object_id
[:f1,:f2].each do|f|
define_method(f) do
j = i
p j.object_id
p i.object_id
j
end
i += 10
p i.object_id
end
p f1.object_id #=> 1,21,41,41,41,41
第二种情况:
i=0
p i.object_id
[:f1,:f2].each do|f|
j = i
p j.object_id
p i.object_id
define_method(f) do
j
end
i += 10
p i.object_id
end
p f1.object_id #=> 1,1,1,21,21,21,41,1
为什么这两种情况代码运行的次数都不一致?
ruby中一切都是对象
i=0
[:f1,:f2].each do|f|
define_method(f) do
j = i
p j
end
i += 10
end
p f1.object_id
p f2.object_id
看完这个你就懂了。