这可能是过早的优化,或过早的过度警告,但我避免在几个类上使用单例,因为我担心我需要将我的应用程序作为多线程运行,并且单身人士会制造冲突和混乱.单例在Ruby中有这个问题,还是有某种内置的命名空间,这样当一个类引用单例时,只返回同一个线程上的单例?
编辑:澄清这些是可观察的类,当更新时会导致正在观看它们的其他类更新.我不确定这是否是线程安全的,但我知道现在我正在通过这些可观察的类大约一吨,这有点烦人.他们看起来像天生的单身人士课程.
我想知道使用MRI ruby(2.0.0)和一些全局变量来制作竞争条件是否容易,但事实证明它并不那么容易.看起来它应该在某些时候失败,但它没有,我已经运行了10分钟.这是我一直试图实现的代码:
def inc(*)
a = $x
a += 1
a *= 3000
a /= 3000
$x = a
end
THREADS = 10
COUNT = 5000
loop do
$x = 1
THREADS.times.map do Thread.new { COUNT.times(&method(:inc)) } end.each(&:join)
break puts "woo hoo!" if $x != THREADS * COUNT + 1
end
puts $x
Run Code Online (Sandbox Code Playgroud)
为什么我无法生成(或检测)预期的竞争条件,并woo hoo!在Ruby MRI 2.0.0中获得输出?
我想知道这个,除了这个之外找不到任何东西
"线程调度程序错误修复和性能改进.在Ruby Enterprise Edition上的线程可以比官方Ruby 1.8快10倍"