lock free到底能不能提高性能

不知道lock free的可以看我前一篇文章。lock free这个东西还真是一路波折,争议不断。最近连续看到有不少大牛(比如12)都曾经或正在讨论这个问题。

lock free对于dead/live lock问题的解决这点应该是没什么可争议的,这也确实是lock free最大的好处。

讨论得比较多的还是集中在算法的性能上,毕竟多核时代multiprogramming主要还是要解决程序性能瓶颈的问题。虽然我个人并不是太关心lock或者lock free对性能的影响,但大家对性能的追求总是无止境的……

映像中以前有些文章测试过lock free带来的性能上的改善,好象是某些情况下可以多达4倍左右,当然这个数字本身没什么意义。众所周知,performance的问题受太多的因素影响,多核就更复杂了,总而言之是软硬件共同作用的结果。不过如果真的是在某些测试下速度可以提高好几倍,这个应该是相当可观的了。

不过很多讨论(还是这个)都认为lock free里面用到的那些CPU的原子指令最终还是需要用到lock一样的机制来实现,所以和直接用lock的算法相比性能基本上不应该有提高。这个观点我是不太赞成的,从概念上讲像CMPXCHG这样的指令当然可以理解成内部用了一把锁,实际上处理器用的应该是锁总线的方法。我们通常讲的真正的lock,这个是操作系统层的概念,至于内部是如何实现的不是很清楚,不过可以肯定的是对锁的各种操作(检查、获取、释放)相对一条简单的原子指令来说都是非常重量级的。毕竟锁要面对的问题也要比一条原子指令复杂得多。所以,用原子指令替换系统lock的方案应该还是会有一些性能提升的。至于提升多少,这个得看具体case了,不过应该不只是那种可以忽略的提高。原子指令相对OS上的锁来说正是利用了硬件对并发的专门支持,毕竟特化的东西通常情况下总是比通用的方案更适合一些(否则也就不需要特化了)。搞过某些特定应用(比如视频处理)的人都知道,一般都是先用软件来模拟实现和验证某个逻辑,但是到最后可能还是要靠一些专用的电路来提速,其实道理有点类似。

LockLock-free是并发编程中的两个概念。 Lock是一种同步机制,用于保护共享资源,确保在同一时间只有一个线程可以访问该资源。当一个线程获得了锁之后,其他线程需要等待锁的释放才能继续执行。这种方式可以避免多个线程同时访问共享资源导致的数据竞争和不一致性。然而,使用锁可能会导致线程的阻塞和等待,从而降低并发性能Lock-free是一种无锁的同步机制,它允许多个线程同时访问共享资源,而不需要等待锁的释放。在lock-free的设计中,每个线程可以独立地进行操作,而不会被其他线程的操作所阻塞。这种方式可以提高并发性能,减少线程的等待时间。在lock-free的实现中,通常使用原子操作和无锁数据结构来确保线程之间的同步和一致性。 Lock-free是wait-free的子集,wait-free是一种更严格的无锁同步机制。在wait-free的设计中,每个线程都可以在有限的步骤内完成自己的工作,而不受其他线程执行速度或负载水平的影响。这种方式可以确保每个线程都能在有限的时间内完成操作,而不会被其他线程的阻塞所影响。 总结来说,Lock是一种阻塞式的同步机制,需要等待锁的释放才能继续执行,而Lock-free是一种非阻塞式的同步机制,允许多个线程同时访问共享资源。在并发编程中,根据具体的需求和性能要求,可以选择使用LockLock-free来实现线程之间的同步和共享资源的访问。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [lock-free vs wait-free](https://blog.csdn.net/qq_37026934/article/details/124267320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值