D プログラミング言語ランタイムの保守担当者に、メモリ アロケータ/ガベージ コレクタが通常の OS クリティカル セクションの代わりにスピンロックを使用するように何度か提案しました。これはあまり普及していません。スピンロックの方が優れていると私が考える理由は次のとおりです。
- 少なくとも私が行った合成ベンチマークでは、メモリ アロケータ/GC ロックの競合がある場合、OS クリティカル セクションよりも数倍高速です。編集:経験的に、スピンロックを使用しても、シングルコア環境では測定可能なオーバーヘッドさえありませんでした。おそらく、メモリアロケーターでロックを短時間保持する必要があるためです。
- メモリの割り当てや同様の操作には、通常、タイムスライスのごく一部、さらにはコンテキスト スイッチにかかる時間のごく一部しかかからないため、競合が発生した場合にコンテキストを切り替えるのはばかげています。
- 問題の実装でのガベージ コレクションは、とにかく世界を停止します。コレクション中に回転することはありません。
メモリ アロケータ/ガベージ コレクタの実装でスピンロックを使用しない正当な理由はありますか?