我需要使用一个volitile内存块来使用多个线程不断地写入和重写内部数据。如果我使用malloc数据或NSMutableData,数据将使用@synchronized呈现线程安全。
我的问题是什么更适合速度?看到我在数据矩阵上运行递归计算的方程式,我需要能够尽快分配,检索和设置数据。
我将对这个主题进行自己的研究,但我想知道是否有人知道如果Objective-C NSMutableData的开销会引入速度挫折?
答案 0 :(得分:1)
re:psychotik的建议:volatile
是C中的关键字,它基本上告诉编译器避免优化对其附加符号的使用。这对于多线程代码或直接与硬件接口的代码很重要。但是,它对于处理内存块(来自malloc()
或NSData
)并不是非常有用。)正如psychotik所说,它适用于基元,如int
或指针(即指针本身,而不是它指向的数据。)它不会让你的数据访问速度更快,实际上可能通过击败编译器的优化技巧来降低它的速度。
对于跨线程同步,如果您不需要递归访问,或者OSSpinLock
设置为递归,那么您认为最快的赌注是pthread_mutex
。请记住OSSpinLock
,正如其名称所示,是一个自旋锁,因此某些使用模式使其效率低于pthread_mutex
,但它也非常接近金属(它基于硬件的原子)获取/设置操作。)
如果您的数据经常被频繁访问以至于您关心锁定性能,那么您可能希望避免NSData
并且只使用来自malloc()
的内存块 - 但是,在不了解您正在尝试完成的内容或您访问数据的频率的情况下,解决方案并不容易出现。你能告诉我们更多你的意图吗?