第90章 七千万次的小石头(5 / 9)
qf-oldlib-001里有四百多个因子。
三年歷史版本。
多个动態调整的样本池。
多种回测配置。
每一天,每一个行业,每一个状態標记、每一个数据版本,都要切出一层层的横截面进行分组排名。
於是,这些微小的小动作被嵌套在庞大的循环网里,被反覆调用。
江临把调用栈里耗时最高的那个函数次数列印了出来
七千八百四十二万一千九百零六次。
看著这个天文数字,他沉默了十几秒,然后在项目的audit_log.md里,他敲下了这样一段话。
真正拖慢整个复杂系统的,从来都不是偶尔出现的大山,而是每天必须被搬运七千万次的小石头。
写完这句话,他停顿了一下。
为了让將来可能接手这份审计报告的平庸工程师也能看懂,他又补了一段更通俗的解释。
一次给五张试卷按分数从高到低排序,对任何人都不难。
难的是,系统要求你一天之內,把给五张试卷排序这个动作,重复七千万次。
標准库里的排序算法在计算机科学上被证明是非常优秀的。
但它们优秀的前提是通用。
標准库就像是一套占地几万平方米的大型自动化物流分拣中心。
它可以处理一万张试卷。
可以处理一百万个包裹。
可以处理带有各种奇怪对象的复杂数据结构。
它强大,通用,绝对可靠。
但如果你的流水线上,每次送过来的永远只有五个小包裹,而且每天要送七千万次。
那么,你每一次都去启动那套耗电巨大的大型物流中心,让传送带空转,让机械臂寻址,去执行庞大的分拣逻辑,
这就是不可饶恕的浪费。
在底层代码的视角里,这种浪费体现为,为了通用性而保留的复杂的函数调用开销。
为了处理多態而进行的动態类型检查。
为了兼容不同数组长度,標准流程里保留了大量条件分支。
而这些分支一旦在热点循环里反覆触发,就会拖慢现代cpu最依赖的指令流水线。
事实上,並不是系统不会排。
而是流程太重了。 ↑返回顶部↑
三年歷史版本。
多个动態调整的样本池。
多种回测配置。
每一天,每一个行业,每一个状態標记、每一个数据版本,都要切出一层层的横截面进行分组排名。
於是,这些微小的小动作被嵌套在庞大的循环网里,被反覆调用。
江临把调用栈里耗时最高的那个函数次数列印了出来
七千八百四十二万一千九百零六次。
看著这个天文数字,他沉默了十几秒,然后在项目的audit_log.md里,他敲下了这样一段话。
真正拖慢整个复杂系统的,从来都不是偶尔出现的大山,而是每天必须被搬运七千万次的小石头。
写完这句话,他停顿了一下。
为了让將来可能接手这份审计报告的平庸工程师也能看懂,他又补了一段更通俗的解释。
一次给五张试卷按分数从高到低排序,对任何人都不难。
难的是,系统要求你一天之內,把给五张试卷排序这个动作,重复七千万次。
標准库里的排序算法在计算机科学上被证明是非常优秀的。
但它们优秀的前提是通用。
標准库就像是一套占地几万平方米的大型自动化物流分拣中心。
它可以处理一万张试卷。
可以处理一百万个包裹。
可以处理带有各种奇怪对象的复杂数据结构。
它强大,通用,绝对可靠。
但如果你的流水线上,每次送过来的永远只有五个小包裹,而且每天要送七千万次。
那么,你每一次都去启动那套耗电巨大的大型物流中心,让传送带空转,让机械臂寻址,去执行庞大的分拣逻辑,
这就是不可饶恕的浪费。
在底层代码的视角里,这种浪费体现为,为了通用性而保留的复杂的函数调用开销。
为了处理多態而进行的动態类型检查。
为了兼容不同数组长度,標准流程里保留了大量条件分支。
而这些分支一旦在热点循环里反覆触发,就会拖慢现代cpu最依赖的指令流水线。
事实上,並不是系统不会排。
而是流程太重了。 ↑返回顶部↑