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比) |
---|---|---|
DCLSingleton | 196.1 | 1.0 |
GccTSDSingleton | 85.4 | 2.3 |
OnceSingleton | 3.0 | 65.9 |
TSDSingleton | 2.3 | 84.6 |
SynchronizedSingleton | 1.0 | 196.1 |
...というわけで、結果を要約すると次の通りになるだろう(左にいくほど高速):
DCLSingleton > GccTSDSingleton >> OnceSingleton > TSDSingleton >> SynchronizedSingleton
H/Wに特に詳しくない場合、DCLPを使うのには勇気が要るわけだが、そういう向きは__threadやpthread_onceを使ったシングルトンを作成すれば、充分な速度(完全同期化バージョンに比べてそれぞれ85倍、3倍)のパフォーマンスが得られることがわかる。少なくとも私と似たような環境の方は :-)
なお、ポータビリティは次の通り(左がポータブル):
(SynchronizedSingleton == OnceSingleton == TSDSingleton) > GccTSDSingleton > DCLSingleton
→続き