当前位置:  开发笔记 > 后端 > 正文

Ruby - 不可变对象

如何解决《Ruby-不可变对象》经验,为你挑选了1个好方法。

我有一个用Ruby编写的高度多线程应用程序,它共享一些实例变量.写入这些变量很少(1%),而读取非常常见(99%).什么是最好的方式(在您看来或以惯用的Ruby方式)确保这些线程始终能够看到最新的值?到目前为止,我有一些想法(虽然在我检修之前我想要你的意见):

在读取或写入任何这些变量之前,请使用最常用的锁(来自Java Concurrency in Practice).这样做的缺点是它synchronize在我的代码中放了很多块,我没有看到一种简单的方法来避免它.

使用Ruby的freeze方法(见这里),虽然它看起来同样麻烦,并没有给我任何第一个选项带来的同步好处.

这些选项看起来都非常相似,但希望那里的任何人都会有更好的想法(或者可以为这些想法中的一个做好准备).我也可以将对象设置为不可变,因此它们在操作过程中不会被破坏或改变,但是我不太了解Ruby以便自己调用这个问题,这个问题似乎在争论对象是高度可变的.



1> Federico Bui..:

使用锁是最合适的方法.你可以看到Jim Weirich关于这个主题的演讲:所有Rubyist应该知道的关于线程的内容.

此外,冻结对象对您没有帮助,因为您想要修改这些变量.将它们冻结到位意味着不会对这些进行进一步修改(因此您的1%的写入将不起作用).

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有