分享

为什么编程更关注内存而很少关注CPU?

 心本心123 2023-06-20 发布于广东

第一时间收到文章更新

Image

作者 | 轩辕之风

来源 | 编程技术宇宙(ID:xuanyuancoding)

周末的时候,我在知乎上看到这么一个问题,觉得很有意思。

Image

我们知道,我们编写的程序,不管是什么编程语言,最后执行的时候,基本上都是CPU在完成。之所以说基本上,是因为还有GPU、FPGA等特殊情况。

但不知道大家发现没有,我们编程的时候,经常在关注内存问题,比如堆和栈的区别、内存分配与释放、指针问题、内存泄露问题等等,但为什么作为执行程序的核心角色——CPU,我们却很少去关注它呢?

对于这个问题,你是怎么看的,思考5秒钟想想?

下面是我的一些看法。

这其实是编程语言越来越“高级”的结果。

事实上,在几十年前,那时候没有现在这么多高级语言,很多编程大佬们都是徒手写汇编,就必须得关注CPU。

以我们熟知的Intel x86架构为例,思考这几个问题:

  1. 长跳和短跳有什么区别?

  2. 中断门、任务门、调用门分别是什么,有什么区别?

  3. x86的CPU有哪些常用寄存器,分别是做什么用的?

  4. 虚拟地址、逻辑地址、线性地址、物理地址分别是什么,有什么区别?

我的公众号读者很多是搞C/C++和底层软件开发的,估计都很少有人能完整回答出这些问题,更别说其他搞Java、Python、JavaScript的一票程序员了。

但是用汇编语言编程,太伤脑子了,开发效率低不说,更重要的是,辛辛苦苦吭哧吭哧写完,结果换个CPU平台还没法通用。

后来,计算机工程师们开始思考:编程为什么还要考虑CPU?得把这些东西屏蔽掉!所以,高级语言应运而生了,从那时起,程序员们编程基本不用考虑CPU了,这些底层的细节,编译器和操作系统都给封装好了,提供一致的调用接口,我们只需要调用操作系统提供的编程接口就好了。

再后来,程序员们觉得面向操作系统编程也很麻烦,和上面CPU同样的问题,不同操作系统的编程API完全不一样,辛辛苦苦吭哧吭哧写完,结果从Windows换到Linux,又不能用了!

计算机工程师们又开始思考:为什么还要考虑操作系统、内存这些东西?于是直接面向虚拟机、解释器的语言又出来了。

如果你是Java、Python、JavaScript的程序员,想想你在编程的时候会关心操作系统,会关心内存管理吗?

估计以后会有人提问:为什么编程很少关注操作系统了?为什么编程很少关注内存了?

时代在发展,功能封装了一层又一层,现在的程序员,越来越少去关注底层的东西了。

但这也造成的一个后果就是,开发的门槛降的越来越低,不需要学《计算机组成原理》、《操作系统》、《数据结构与算法》这些计算机基础课程,只需要《21天从入门到精通》就可以进入这个行业。

我之前看到过一个报道,最近几年,每年毕业的大学生大概在1000万左右。其中计算机相关专业(包含计算机科学与技术、软件工程、网络工程、通信工程、电子信息工程、自动化等)加起来的人数占比在10%左右,这样算下来每年都有100万左右的新人涌入这个赛道,这还不包括很多其他专业转码的人,加起来只会更多。

Image

这样一想,计算机真的是卷的厉害。

随着越来越多新人的加入,计算机软件开发行业竞争也越来越激烈,只靠CRUD技能很大程度上会限制程序员们在技术领域的发展。而学习了解一些计算机底层技术知识,修炼好程序员的内功,可以帮助我们知其然还能知其所以然,在一众开发中脱颖而出。

所以推荐咱们程序员除了日常工作项目开发工作,多了解一些计算机底层的知识。像是Linux操作系统、计算机网络工作原理、数据库底层原理等等。

Image






    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多