一般来说,非功利性的学习则着重于个人兴趣与编程能力的提升,不以某个具体的目标为驱动,而是追求对知识的广博了解和提升代码质量。
更实际的场景如:
根据计算机系统中 cache 的原理(计算机会缓存最近访问过的数据的相邻数据),我们可以在连续访问内存和外存时优先访问相近的数据,以此来提升程序的运行效率。
比如访问数组时,尽量顺序访问数组元素,我们可以更好地利用 cache 缓存的预取机制和局部性原理。减少未命中的情况。
在计算机系统中我们可以知道相比 cpu 读取寄存器和内存,硬盘、网络接口卡的工作速度要慢得多。 因此 I/O 操作消耗巨大(其中还包含中断和传输等损耗),在编写程序时就会尽量减少频繁 I/O 操作。
比如在读取文件时,通过增大每次读取或写入的数据块大小,减少了对硬盘 I/O 操作的次数。尽管单次操作的时间可能稍有增加,但相对开销是会更小的。
考虑到计算机系统中的多核处理器设计,在编写多线程或并行程序时,使用锁、信号量或原子操作来协调共享资源的访问,从而提高程序的执行效率和响应速度。
比如有些代码不恰当使用互斥锁导致的性能瓶颈,我们使用原子操作来替代互斥锁(如 C11 引入的原子操作
atomic_fetch_add_explicit),这减少了线程间同步的开销。
关于计算机理论知识的实际应用远不止上述这些,由于篇幅原因这里就不一一介绍。读者学完后自能发现其中妙不可言。
相信对于计算机专业的同学来说,能手搓出一个自己的微型操作系统一定是一件非常浪漫的事吧(当然并不推荐没有完整的理论知识自己去写一个操作系统)。