28.锁|性能分析

前言

是面试中较为常见的内容,在这个越来越卷的行情下,你觉得你对的知识了解的够深(卷)么?

一、 iOS的锁

1.1 经典的性能对比图

下面是一张经典的各种锁方案的性能对比图,相信很多人都见过,出自ibireme大佬。

01

但是这已经是多年以前的测试对比了,现如今又是什么样的结果呢?我们自己来测试一下吧!

1.2 锁的性能测试

测试代码

Swift 的方式来测试一下各个锁 10W 次加锁解锁的耗时吧,顺便熟悉下 Swift 下各种锁的用法:

ARM64 架构

iPhoneX

从快到慢:

  • os_unfair_lock_lock

  • pthread_mutex_t

  • PTHREAD_MUTEX_RECURSIVE

  • NSCondition

  • NSlock

  • NSRecursiveLock

  • dispatch_semaphore_t

  • NSConditionLock

  • synchronized

  • OSSpinLock

ARM64

iPhone8 模拟器下

从快到慢:

  • PTHREAD_MUTEX_RECURSIVE

  • NSCondition

  • NSRecursiveLock

  • pthread_mutex_t

  • NSlock

  • os_unfair_lock_lock

  • OSSpinLock

  • dispatch_semaphore_t

  • synchronized

  • NSConditionLock

总结

此处的结果并不能作为绝对结论。根据设备硬件及运行情况有不同,有兴趣可以自行进行调试。但总体各方案间的差距并没有到非常致命的地步。

synchronized 仍然是开发中我们最常使用的一种,性能OK、使用方便(不用操心 lock unlock)。

参考

Last updated

Was this helpful?