kvark / choir

Task Orchestration Framework
MIT License
52 stars 3 forks source link

Use a single condvar/mutex pair for synchronization #35

Closed kvark closed 1 year ago

kvark commented 1 year ago

Perf-wise I don't see much difference: Old:

individual tasks: single worker
                        time:   [1.6127 ms 1.6222 ms 1.6316 ms]
                        change: [-6.0241% -5.2214% -4.3739%] (p = 0.00 < 0.05)

multi-task: single worker
                        time:   [1.0690 ms 1.0743 ms 1.0796 ms]
                        change: [-3.0450% -1.0601% +1.5580%] (p = 0.43 > 0.05)

individual tasks: 8 workers
                        time:   [713.70 µs 720.72 µs 727.99 µs]
                        change: [-8.5857% -6.8229% -4.9356%] (p = 0.00 < 0.05)

multi-task: 8 workers   time:   [305.64 µs 307.27 µs 308.94 µs]
                        change: [-6.7217% -5.5816% -4.4155%] (p = 0.00 < 0.05)

New:

individual tasks: single worker
                        time:   [1.6806 ms 1.6903 ms 1.7003 ms]
                        change: [-94.953% -94.909% -94.867%] (p = 0.00 < 0.05)

multi-task: single worker
                        time:   [1.0850 ms 1.0931 ms 1.1016 ms]
                        change: [-75.084% -74.816% -74.527%] (p = 0.00 < 0.05)

individual tasks: 8 workers
                        time:   [769.29 µs 780.39 µs 791.85 µs]
                        change: [+1.2185% +3.2096% +5.0820%] (p = 0.00 < 0.05)

multi-task: 8 workers   time:   [318.11 µs 321.61 µs 325.37 µs]
                        change: [-94.604% -94.527% -94.441%] (p = 0.00 < 0.05)

However, it simplifies things quite a bit. There is less mutexes around, less obscure logic of waking up threads. It's much nicer internally.