0

複数のスレッドを使用して内部のデータを常に書き込みおよび書き換えるために、メモリの揮発性ブロックを使用する必要があります。malloc されたデータまたは NSMutableData のいずれかを使用する場合、データは @synchronized を使用してスレッドセーフにレンダリングされます。

私の質問は、速度のためにより推奨されるものは何ですか? データの行列に対して再帰的に計算された方程式を実行しているのを見て、できるだけ早くデータを割り当て、取得し、設定できるようにする必要があります。

私はこのテーマについて独自の調査を行うつもりですが、Objective-C NSMutableData のオーバーヘッドが速度の低下をもたらすかどうかを誰かがすぐに知っているかどうか疑問に思っていましたか?

4

1 に答える 1

1

re: Psychotik の提案:volatileは、C のキーワードであり、基本的に、それが接続されているシンボルの使用を最適化しないようにコンパイラに指示します。これは、マルチスレッド コード、またはハードウェアと直接インターフェイスするコードにとって重要です。malloc()ただし、(またはからの) メモリのブロックを操作するのにはあまり役に立ちませんNSData。psychotik が言ったように、またはポインターなどのプリミティブで使用するためのものですint(つまり、ポインター自体であり、ポインターが指すデータではありません)。データへのアクセスを高速化しますが、実際には、コンパイラの最適化トリックを無効にすることで速度を低下させる可能性があります。

クロススレッド同期の場合、最速の賭けは、OSSpinLock再帰アクセスが必要ない場合、または必要な場合はpthread_mutex再帰として設定することだと思います。OSSpinLock名前が示すように、 はスピン ロックであるため、特定の使用パターンでは よりも効率が低くなりますがpthread_mutex、金属に非常に近いことに注意してください (ハードウェアのアトミックな get/set 操作に基づいています) 。

データが実際に頻繁にアクセスされてパフォーマンスのロックが懸念される場合は、おそらく避けNSDataて、メモリのブロックで作業することをお勧めしmalloc()ますが、何を達成しようとしているのか、またはデータにアクセスする頻度が高いほど、ソリューションはすぐには現れません。あなたの意図について詳しく教えていただけますか?

于 2010-07-12T19:54:32.190 に答える