Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 非原子值得吗?_Cocoa Touch_Performance - Fatal编程技术网

Cocoa touch 非原子值得吗?

Cocoa touch 非原子值得吗?,cocoa-touch,performance,Cocoa Touch,Performance,由于性能原因,我多次看到@property被定义为非原子。是否有证据表明这是值得的?当属性未声明为非原子时,合成访问器将使用锁来确保该属性是线程安全的。当不必要地使用锁时,它会将不需要的消息添加到程序中。锁定操作本身也应该是原子的,这意味着处理器将锁定内存总线。这会减慢您的程序以及其他程序。如果某个属性不经常访问,您可能不会注意到差异,但如果该属性经常使用,您肯定会希望使用它。不过,总的来说,为什么不使用它呢?一些额外的字符可能会导致程序加速。实际上,我关心的是,是否有可能遇到死锁/竞态条件/任

由于性能原因,我多次看到@property被定义为非原子。是否有证据表明这是值得的?

当属性未声明为非原子时,合成访问器将使用锁来确保该属性是线程安全的。当不必要地使用锁时,它会将不需要的消息添加到程序中。锁定操作本身也应该是原子的,这意味着处理器将锁定内存总线。这会减慢您的程序以及其他程序。如果某个属性不经常访问,您可能不会注意到差异,但如果该属性经常使用,您肯定会希望使用它。不过,总的来说,为什么不使用它呢?一些额外的字符可能会导致程序加速。

实际上,我关心的是,是否有可能遇到死锁/竞态条件/任何值得额外提高性能的因素。对于可以在多线程中使用的东西,绝对不要使用
非原子的
。我想我认为这是显而易见的,因为当某些东西可以被多个线程访问时,原子性是必不可少的,你会问在单线程应用程序上使用原子性是否有益。问题是“它值得吗?”-如果不测量特定的代码,这个问题是无法回答的。@James,这就是为什么我没有说是或否。我描述了它可以带来好处的原因,并指出,如果可以,没有理由不使用它。它不像是需要重构整个程序。我本可以用类似的方式回答这样一个问题:“不把
睡眠(1)
放在每一句话之后值得吗?”@ughoavgfhw,我应该更坚定地表明我的立场。添加非原子是错误的,除非并且直到您度量它对您自己的代码的实际影响。非原子代码是只应在必要时添加的附加代码。换句话说,过早优化是错误的——这正是添加非原子的原因。