zoukankan      html  css  js  c++  java
  • 原子属性和使用互斥锁实现的属性的性能对比

    代码:

    #import "ViewController.h"
    
    extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));
    
    @interface ViewController ()
    
    // 原子属性 - 互斥锁实现
    @property (strong, nonatomic) NSObject *obj1;
    
    // 原子属性 - 自旋锁实现
    @property (strong, atomic) NSObject *obj2;
    
    @end
    
    @implementation ViewController
    
    - (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {
        
        size_t count = 1000000;
        
        // 性能测试 - 模拟原子属性
        uint64_t time1 = dispatch_benchmark(count, ^{
            self.obj1 = [[NSObject alloc] init];
        });
        NSLog(@"模拟的原子属性 = %llu ns", time1);
        
        // 性能测试 - 原子属性
        uint64_t time2 = dispatch_benchmark(count, ^{
            self.obj2 = [[NSObject alloc] init];
        });
        NSLog(@"原子属性 = %llu ns", time2);
    }
    
    // 重写set方法
    - (void)setObj1:(NSObject *)obj1 {
        // 使用互斥锁模拟原子属性
        @synchronized(self) {
            _obj1 = obj1;
        }
    }
    
    @end

    输出:

    模拟的原子属性 = 345 ns
    原子属性 = 192 ns

    总结:

    原子属性比使用互斥锁实现的属性性能更好。

  • 相关阅读:
    PHP-MYSQL中文乱码问题.
    如何确定一个属性是存在原型中还是对象中
    原型模式
    工厂模式
    定义多个属性 Object.defineProperties()
    数组的reduce方法的应用
    从整数范围内随机选择一个值
    apply()技巧
    JS中的Global对象
    GitLab-CI与GitLab-Runner
  • 原文地址:https://www.cnblogs.com/xwoder/p/4720733.html
Copyright © 2011-2022 走看看