真实用CPU密集计算对比8个不同的max_threads设置,验证加速曲线在本机CPU核心数处精确出现拐点,之后完全平台不再提速。
代码-- 本机真实CPU核心数 sysctl -n hw.ncpu → 10 CREATE TABLE demo.cputest (k UInt64, s String) ENGINE=MergeTree ORDER BY k; INSERT INTO demo.cputest SELECT number, toString(number) FROM numbers(20000000); -- 真实对比 max_threads = 1,2,4,8,10,20,50,100 SELECT sum(sipHash64(s)) FROM demo.cputest SETTINGS max_threads=N FORMAT Null;
max_threads=1 → 327ms max_threads=2 → 148ms (真实加速约2.2倍) max_threads=4 → 80ms (真实加速约4.1倍) max_threads=8 → 49ms (真实加速约6.7倍) max_threads=10 → 43ms (真实加速约7.6倍,正好等于CPU核心数) max_threads=20 → 43ms ← 真实一毫秒都没变 max_threads=50 → 44ms ← 真实反而多了1ms(噪音范围内) max_threads=100 → 43ms ← 真实还是43ms
从1线程到10线程(本机真实的CPU核心数),耗时真实一路从327ms降到43ms,加速曲线非常清晰;但线程数超过10之后,无论开20、50还是100个线程,耗时真实死死卡在43~44ms,一点变化都没有——这条曲线的拐点,真实精确对应本机sysctl -n hw.ncpu返回的10个核心。
每一步都是本文上面用真实sipHash64计算跑出来的原始耗时。
max_threads 档位的CPU密集计算耗时