热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

开发笔记:上帝视角:程序员为什么需要理解CPU?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了上帝视角:程序员为什么需要理解CPU?相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了上帝视角:程序员为什么需要理解 CPU?相关的知识,希望对你有一定的参考价值。








来源 | 码农的荒岛求生(ID:escape-it)


可能有的同学会问,程序员写代码就好了,为什么需要去理解CPU啊?不嫌累啊?啊?啊?你倒是说啊。



计算机系统 != 汉堡包



在之前的文章中我把计算机系统比作一个汉堡包,这个类比不太恰当,虽然汉堡包是层级结构,但它是上下对称的,计算机系统的层级结构显然不是对称的,你要说披萨还差不多,注意是披萨,不是馅饼,因为馅饼也是对称的



计算机系统的结构是上层基于下层,并且上层对外屏蔽下层,因此用洋葱来比喻计算机系统是再恰当不过了,这两者都是层级结构,下层对上层都不可见,最妙的是,这两者看时间长了都会辣眼睛!



这种层级结构保证了处于上层程序员无需理解下一层。




模糊的精确



你的确不需要知道底层全部的微观细节,实际上我也不相信有谁能全部知道,如果你太注重细节,没有对计算机系统的大局观而是一头扎到细节里,最终也只是徒劳,只挖掘细节很像是一种“模糊的精确”。





精确的模糊



但是,如果你能知道底层的宏观上的原理,情况就不一样了,我把这种宏观上的不那么细节的理解称之为“精确的模糊”,老外有一个词我认为很贴切:The Big Picture。



程序员这一行,个人认为精确的模糊要远好于模糊的精确,因为前者要想进一步了解细节是很容易的(只是需不需要的问题),反之则非常困难。而且依靠这种精确的模糊已经能解决很多问题,而后者则不能。




上帝视角



每一个大家认为的高手脑海里都有这样一种精确的模糊(或者精确的精确,高手中的高手),ta可能不知道编译器(解释器)、链接器、操作系统、网络协议栈、CPU、内存等等所有核心模块的全部细节,但是ta知道这些模块“应该”怎样工作,当你有了这种理解后,你会发现:


你很确定的自己的每一行程序是怎么被计算机执行的;你清楚的知道什么时候该用多线程什么时候不该用;你清楚的知道自己的线程什么时候该加锁、什么时候该等待,怎样解决互斥问题,怎样解决同步问题;


你清楚的知道自己的每一段代码大概可能会执行多长时间;你清楚的知道自己的每次函数调用从上层到底层是如何执行的,因此你很清楚该选择使用什么样的函数,传递什么样的参数才能达到自己想要的效果;你清楚的理解计算机系统,因此发现刚刚在本文开头立人设的小风说的都是你已经知道的东西。



当你的程序出现问题后无头苍蝇般瞎试一通并期待自己的程序能奇迹般正常工作时;当编译器提示奇怪的错误时;当链接器莫名其妙的提示'undefined reference to ***'时;当程序运行起来就core时;


当程序运行一段时间被OOM kill掉时;当你的程序内存泄漏时;当你的程序莫明奇妙耗时非常高时;如果在这些时刻你能做的仅仅是等待别人来帮忙,那么就不要说程序员不需要理解底层了。


说了这么多,用一句话说就是理解底层的好处可以让程序员在写程序时获得“上帝视角”,一切都逃不过你的法眼。





生于2001年的《程序员》曾陪伴了无数开发者成长,影响了一代又一代的中国技术人。时隔20年,《新程序员》带着全球技术大师深邃思考、优秀开发者技术创造等深度内容回来了!同时将全方位为所有开发者呈现国内外核心技术生态体系全景图。扫描下方小程序码即可立即订阅!



    




推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了Java虚拟机中的垃圾收集器,包括年轻代收集器Serial收集器、ParNew收集器、Parallel Scavenge收集器,以及老年代收集器Serial Old收集器、Parallel Old收集器和CMS收集器。对每种收集器的算法和特点进行了详细解析,希望对读者有参考价值。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
author-avatar
够不李先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有