-
Notifications
You must be signed in to change notification settings - Fork 70
Closed
Description
Native SynchronizedObject implementation allocates an instance of LockState
on every lock()
and unlock()
call.
I've compared performance of the SynchronizedObject
and a simple non-allocationg spin-lock in uncontended case. The benchmarks can be found here. In my case, the metrics reported were as follows (greater values are better):
macosArm64 summary:
Benchmark Mode Cnt Score Error Units
AtomicFUBenchmark.benchmarkUncontended thrpt 5 25905005.328 ± 96180.326 ops/sec
NoalLockBenchmark.benchmarkUncontended thrpt 5 65159902.404 ± 126124.691 ops/sec
Compose Multiplatform heavily utilizes atomicfu's SynchronizedObject
under the hood, with the LockState
instances being the most frequent heap allocation case.
Certain Compomse Multiplatfrom benchmarks experience noticeable improvement in missed frame ratio (1/3 better) if the SynchronizedObject
implementation is replaced with a non allocating spin lock.
sellmair and bennyhuo