java cas循环占用cpu资源问题
在多线程高并发情况下,使用cas修改数据有可能一直无法修改成功导致占用cpu资源,效率低下。请问各位大神有什么解决方式吗?我能想到的是循环n次之后可以暂停m毫秒继续尝试修改,如此反复k次如果还不成功可以抛出异常了。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在多线程高并发情况下,使用cas修改数据有可能一直无法修改成功导致占用cpu资源,效率低下。请问各位大神有什么解决方式吗?我能想到的是循环n次之后可以暂停m毫秒继续尝试修改,如此反复k次如果还不成功可以抛出异常了。。。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(10)
可以用多进程啊
是的 感觉就是添加延时机制就好了
他说的“如果”JVM能支持处理器提供的pause指令,如果啊
jvm能配置pause指令么?不能吧,对jvm优化好像没见过可以配置pause指令,你可以请教一下其他大神
在网上看的这个答案,不太懂:自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销。如果JVM能支持处理器提供的pause指令那么效率会有一定的提升,pause指令有两个作用,第一它可以延迟流水线执行指令(de-pipeline),使CPU不会消耗过多的执行资源,延迟的时间取决于具体实现的版本,在一些处理器上延迟时间是零。第二它可以避免在退出循环的时候因内存顺序冲突(memory order
觉得跟我说的暂定一段时间相似
sleep会卡死你,不信你试试,
你要同步的话考虑rpc了
你说的这个方案应该是异步化处理了,我说的是同步处理,加sleep是为了暂停争夺cpu资源,譬如休眠50ms之后再继续
多线程大并发如果考虑Thread.sleep那就错鸟,那是作死的节奏!
分发机制就是把数据推送出去在其他地方处理数据修改
引用来自“北极心”的评论
首先没明白你说的“cas修改数据有可能一直无法修改成功导致占用cpu资源”
其次多线程并发情况下你用什么“暂停m毫秒”用“Thread.sleep”?。。。。
个人建议,考虑分发机制
首先没明白你说的“cas修改数据有可能一直无法修改成功导致占用cpu资源”
其次多线程并发情况下你用什么“暂停m毫秒”用“Thread.sleep”?。。。。
个人建议,考虑分发机制