我已经搜索过其他Stack Overflow帖子并在其他地方进行过研究,而且我对广泛的线程很熟悉,我只需要对这个具体案例进行一些澄清,因为本机ruby线程并非如此。我曾经习惯于jruby中的并行线程,并且我不像操作OS级别的线程那样完全理解绿色线程。
我应该直接引用原始实例变量,还是应该修复该实例变量?
这有效,但我担心@foo可能会在线程完成之前丢失:
@foo = { bar: "baz" }
Thread.new { Mailer.notice(@foo).deliver }
想知道我是否应该做这样的事情:
@foo = { bar: "baz" }
Thread.new { Mailer.notice(@foo.freeze.clone).deliver }
以引用的例子或文章的形式将不胜感激。如果有人有时间写这样的例子,真正的测试会更有价值!
答案 0 :(得分:0)
答案是。由于我使用的是> 1.9,因此线程不是绿色的,从生命周期的角度来看,这两种方法都是相同的。