Singleton速度比較 (2) 結果

結果は次の通り。

$ ./a.out
DCLSingleton: 0.27 [s]
GccTSDSingleton: 0.62 [s]
OnceSingleton: 17.08 [s]
TSDSingleton: 22.83 [s]
SynchronizedSingleton: 52.95 [s]


手法処理時間(1/Sync比)処理時間(DCL比)
DCLSingleton196.11.0
GccTSDSingleton85.42.3
OnceSingleton3.065.9
TSDSingleton2.384.6
SynchronizedSingleton1.0196.1


...というわけで、結果を要約すると次の通りになるだろう(左にいくほど高速):

DCLSingleton > GccTSDSingleton >> OnceSingleton > TSDSingleton >> SynchronizedSingleton


H/Wに特に詳しくない場合、DCLPを使うのには勇気が要るわけだが、そういう向きは__threadやpthread_onceを使ったシングルトンを作成すれば、充分な速度(完全同期化バージョンに比べてそれぞれ85倍、3倍)のパフォーマンスが得られることがわかる。少なくとも私と似たような環境の方は :-)


なお、ポータビリティは次の通り(左がポータブル):

(SynchronizedSingleton == OnceSingleton == TSDSingleton) > GccTSDSingleton > DCLSingleton

続き