C++標準のstd::shared_mutexを自前のスピンロックによる実装に置き換えたところ、スループットが激烈に向上した。その経緯と実装と性能評価について説明する。 Tkrzwはマルチスレッドによる並列処理性能を重視したデータベースライブラリである。ところで、GitHubにて、TkrzwのGoインターフェイスを6倍高速化するというアイデアを報告いただいた。ボトルネックがC++のコアライブラリ内のstd::shared_timed_mutexにあるということを突き止め、それをサードパーティの実装に置き換えると高速化するという話であった。Goだから高速化するというより、ファイル層でスレッド同士がブロックしやすいような条件でテストをすると差が出やすいということらしい。 そのサードパーティの実装とはobject_threadsafeというパッケージにあるcontention_free_shar