java cas循环占用cpu资源问题

发布于 2021-12-04 19:28:06 字数 116 浏览 950 评论 10

在多线程高并发情况下,使用cas修改数据有可能一直无法修改成功导致占用cpu资源,效率低下。请问各位大神有什么解决方式吗?我能想到的是循环n次之后可以暂停m毫秒继续尝试修改,如此反复k次如果还不成功可以抛出异常了。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

流心雨 2021-12-05 15:41:20

可以用多进程啊

顾挽 2021-12-05 15:39:25

是的 感觉就是添加延时机制就好了

甜扑 2021-12-05 15:37:39

他说的“如果”JVM能支持处理器提供的pause指令,如果啊

jvm能配置pause指令么?不能吧,对jvm优化好像没见过可以配置pause指令,你可以请教一下其他大神

噩梦成真你也成魔 2021-12-05 15:36:56

在网上看的这个答案,不太懂:自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销。如果JVM能支持处理器提供的pause指令那么效率会有一定的提升,pause指令有两个作用,第一它可以延迟流水线执行指令(de-pipeline),使CPU不会消耗过多的执行资源,延迟的时间取决于具体实现的版本,在一些处理器上延迟时间是零。第二它可以避免在退出循环的时候因内存顺序冲突(memory order

悸初 2021-12-05 15:29:22

觉得跟我说的暂定一段时间相似

路还长,别太狂 2021-12-05 15:23:28

sleep会卡死你,不信你试试,

你要同步的话考虑rpc了

墨洒年华 2021-12-05 14:32:22

你说的这个方案应该是异步化处理了,我说的是同步处理,加sleep是为了暂停争夺cpu资源,譬如休眠50ms之后再继续

野心澎湃 2021-12-05 04:09:47

多线程大并发如果考虑Thread.sleep那就错鸟,那是作死的节奏!

分发机制就是把数据推送出去在其他地方处理数据修改

好听的两个字的网名 2021-12-05 00:06:00

引用来自“北极心”的评论

首先没明白你说的“cas修改数据有可能一直无法修改成功导致占用cpu资源”

其次多线程并发情况下你用什么“暂停m毫秒”用“Thread.sleep”?。。。。

个人建议,考虑分发机制

孤檠 2021-12-04 23:56:06

首先没明白你说的“cas修改数据有可能一直无法修改成功导致占用cpu资源”

其次多线程并发情况下你用什么“暂停m毫秒”用“Thread.sleep”?。。。。

个人建议,考虑分发机制

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文