Forwarded from codedump的电报频道 (老C)
#编程
#方法论
Andrej Karpathy的一条推:
简单聊一聊我的理解。
数学视角,常见的就是算法视角,例如各种算法时间复杂度、空间复杂度的分析就属于数学视角。物理视角,考虑存储介质的特性、数据分布的局部性,我举几个例子。
* LSM类的存储引擎,写入WAL就认为写入成功,这利用了append操作比随机写操作更快的物理特性;
* btree类存储引擎,以页面(page)为最小存储单位,读写的时候以页面为单位,既利用了批量读写数据的特性,又利用了数据的局部性。
Jeaf Dean常说的各类存储的延迟数据,也是物理视角。
通常会发现,一个算法即使数学上很好,但是如果不考虑物理特性,也会丧失它的优势。
#方法论
Andrej Karpathy的一条推:
A major mistake I made in my undergrad is that I focused way too much on mathematical lens of computing - computability, decidability, asymptotic complexity etc. And too little on physical lens - energy/heat of state change, data locality, parallelism, computer architecture. The former is interesting; The latter bestows power.
(我在本科阶段犯的一个重大错误是过于关注计算的数学视角——可计算性、可判定性、渐近复杂性等,而太少关注物理视角——状态变化的能量/热量、数据局部性、并行性、计算机架构。前者很有趣;后者赋予力量。)
简单聊一聊我的理解。
数学视角,常见的就是算法视角,例如各种算法时间复杂度、空间复杂度的分析就属于数学视角。物理视角,考虑存储介质的特性、数据分布的局部性,我举几个例子。
* LSM类的存储引擎,写入WAL就认为写入成功,这利用了append操作比随机写操作更快的物理特性;
* btree类存储引擎,以页面(page)为最小存储单位,读写的时候以页面为单位,既利用了批量读写数据的特性,又利用了数据的局部性。
Jeaf Dean常说的各类存储的延迟数据,也是物理视角。
通常会发现,一个算法即使数学上很好,但是如果不考虑物理特性,也会丧失它的优势。