本来没打算测试这些方案的,因为各种方案的出现都是针对具体场景设计的,做同一场景的测试没有很大的必要,但看了网上很多博主的评测,感觉还是有必要简单整理一下。
补充
在线程同步的上一篇文章中提到了读写锁,也是线程同步解决方案之一,没有做详细整理,后来查了一下pthread库,里面是有提供读写锁pthread_rwlock的,在这做一下补充。此外pthread库里还有pthread_cond也可以实现线程同步,有兴趣可以查阅了解。
pthread_rwlock
特性
读写锁的设计是为了解决在既有读又有写的场景,读的操作明显比写的操作多,保证多线程在没有写操作的时候可以同时做读操作。
使用
|
|
简单测试
测试方法
测试方法很简单,在这口述一下,测试代码有点乱,就不整理了。
- 测试设备:iPhone6s iOS 9.3.2。
- 测试场景:选择Objective-C中NSMutableDictionary的读写,首先继承NSMutableDictionary实现NSMutableDictionary的子类,覆写读写方法,读写操作用各种不同的线程同步方案包装,然后写测试代码。先在主线程中对NSMutableDictionary的对象实例做100000次的读写操作,测得操作执行时间,然后针对每种方案会启多个线程对同一NSMutableDictionary子类对象实例做10000次读写操作,随后在主线程中做100000次读写操作,测得主线程读写操作执行时间。
- 数据整理:每种方案的时间减去普通NSMutableDictionary对象读写操作的时间。
测试结论
最终的测试结果大概如下图所示:
如上图显示,OSSpinLock、dispatch_semaphore、pthread_rwlock的速度明显靠前,但网上说pthread_mutex应该是仅次于OSSpinLock,不知道是测试方法还是场景的原因,并没有得出同样的结论,嘛,反正就这样吧。
最后,以上测试结果仅供参考!!!