加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby – 不可变对象

发布时间:2020-12-16 19:13:30 所属栏目:百科 来源:网络整理
导读:我有一个用 Ruby编写的高度多线程的应用程序,它共享一些实例变量.写入这些变量很少(1%),而读取非常常见(99%).什么是最好的方式(在您看来或以惯用的Ruby方式)确保这些线程始终能够看到最新的值?到目前为止,我有一些想法(尽管在我检修之前我想要你的意见):
我有一个用 Ruby编写的高度多线程的应用程序,它共享一些实例变量.写入这些变量很少(1%),而读取非常常见(99%).什么是最好的方式(在您看来或以惯用的Ruby方式)确保这些线程始终能够看到最新的值?到目前为止,我有一些想法(尽管在我检修之前我想要你的意见):

>在读取或写入任何这些变量之前,请使用最常用的锁(从Java Concurrency in Practice开始).这样做的缺点是它在我的代码中放了很多同步块,我没有看到一种简单的方法来避免它.
>使用Ruby的冻结方法(参见here),虽然它看起来同样麻烦,并没有给我任何第一个选项带来的同步好处.

这些选项看起来都非常相似,但希望那里的任何人都会有更好的想法(或者可以为这些想法之一辩护).我也可以使对象不可变,因此它们在操作过程中不会被破坏或改变,但我不太了解Ruby以便自己进行调用,this question似乎认为对象是高度可变.

解决方法

使用锁是最合适的方法.你可以看到Jim Weirich关于这个主题的演讲: What All Rubyist Should Know About Threading.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读