SFE*_*ley 15 ruby multithreading autoload ruby-1.9
在我看来,自从这个着名的线程以来,Ruby社区一直在关注自动加载,因为出于线程安全原因而不鼓励使用它.
有谁知道这不再是Ruby 1.9.1或1.9.2中的问题吗?我已经看过一些关于包装需求的讨论等等,但1.9更改日志(或者至少和我能找到的一样多)似乎并没有解决这个特定的问题.我想知道我是否可以在没有任何合理悲伤的情况下合理地开始自动加载仅1.9的库.
提前感谢任何见解.
带来2011年的更新,因为我对它也很好奇.
目前有两张门票:
核心开发人员建议在CRuby/JRuby 1.9中,require和autoload以相同的方式工作并且是线程安全的.这就是ruby保持锁定直到文件完全加载的意义上.
然而,这具有引入潜在死锁的不方便的副作用.特别:
结论可能是:如果您的应用程序中存在任何可能的死锁,则在启动线程之前需要您需要的所有内容.
小智 7
我不知道一般情况,但该线程的repro示例在1.9.1中没有中断:
autoloaded.rb:
sleep 1
Bar::Foo = 1
Run Code Online (Sandbox Code Playgroud)
autoloader.rb:
module Bar
autoload :Foo, 'autoloaded.rb'
end
t1 = Thread.new { Bar::Foo }
t2 = Thread.new { Bar::Foo }
t1.join; t2.join
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6075 次 |
| 最近记录: |