0

我需要使用一个易失的内存块来使用多个线程不断地写入和重写内部的数据。如果我使用 malloc 数据或 NSMutableData,数据将使用 @synchronized 呈现线程安全。

我的问题是什么更推荐速度?看到我在数据矩阵上运行递归计算的方程,我需要能够尽快分配、检索和设置数据。

我将对该主题进行自己的研究,但我想知道是否有人知道Objective-C NSMutableData 的开销是否会导致速度挫折?

4

1 回答 1

1

回复:psychotik 的建议:volatile是 C 中的一个关键字,它基本上告诉编译器避免优化它所附加的符号的使用。这对于多线程代码或直接与硬件接口的代码很重要。malloc()但是,它对于处理内存块(来自或)并不是很有用NSData。正如psychotik所说,它用于诸如int或指针之类的原语(即指针本身,而不是它指向的数据。)它不会使您的数据访问更快,实际上可能会通过破坏编译器的优化技巧来减慢速度。

对于跨线程同步,我认为你最快的选择是,OSSpinLock如果你不需要递归访问,或者如果你需要,pthread_mutex则设置为递归。请记住OSSpinLock,顾名思义,自旋锁,因此某些使用模式使其效率低于 a pthread_mutex,但它也非常接近金属(它基于硬件的原子 get/set 操作。)

如果您的数据确实被频繁访问以至于您担心锁定性能,那么您可能希望避免NSData并只使用来自的内存块——malloc()但是,不知道更多关于您要完成的工作或您访问数据的频率如何,解决方案并不容易出现。你能告诉我们更多关于你的意图吗?

于 2010-07-12T19:54:32.190 回答