Repeatedly marshal the same object and unmarshal outcome json into a new object, for N times
Create T number of threads (or processes) to execute above task.
Adjust T and N meanwhile, ensuring total works always equal to T*N
Environment
goos: darwin
goarch: amd64
cpu: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Result
It's very clear that for JSON lib, its processability doesn't grow linearly with the number of CPUs. And there is a abvious threshold once paralleled threads (or processes) number goes above half of the CPU cores
=== RUN TestScalability_Process
=== RUN TestScalability_Process/sonic
single-process
1 processes total cost: 169785us
1/4-processes
4 processes total cost: 73421us
half-processes
8 processes total cost: 72286us
3/4-processes
12 processes total cost: 85187us
full-processes
16 processes total cost: 100788us
full-processes-1
15 processes total cost: 99805us
=== RUN TestScalability_Process/std
single-process
1 processes total cost: 315315us
1/4-processes
4 processes total cost: 105815us
half-processes
8 processes total cost: 90710us
3/4-processes
12 processes total cost: 107567us
full-processes
16 processes total cost: 115681us
full-processes-1
15 processes total cost: 117348us
--- PASS: TestScalability_Process (1.45s)
--- PASS: TestScalability_Process/sonic (0.60s)
--- PASS: TestScalability_Process/std (0.85s)
=== RUN TestScalability_Thread
num cpu: 16
=== RUN TestScalability_Thread/sonic
single-thread
1 threads total cost: 150786us
1/4-threads
4 threads total cost: 51560us
half-threads
8 threads total cost: 37515us
3/4-threads
12 threads total cost: 36387us
full-threads
16 threads total cost: 39338us
full-threads-1
15 threads total cost: 40201us
=== RUN TestScalability_Thread/std
single-thread
1 threads total cost: 287707us
1/4-threads
4 threads total cost: 96182us
half-threads
8 threads total cost: 88373us
3/4-threads
12 threads total cost: 96573us
full-threads
16 threads total cost: 115144us
full-threads-1
15 threads total cost: 110567us
Case
Environment
Result
It's very clear that for JSON lib, its processability doesn't grow linearly with the number of CPUs. And there is a abvious threshold once paralleled threads (or processes) number goes above half of the CPU cores