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

news2024/12/28 12:58:48

我们知道,我们编写的程序,不管是什么编程语言,最后执行的时候,基本上都是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万左右的新人涌入这个赛道,这还不包括很多其他专业转码的人,加起来只会更多。

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

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大促转化率精准预估优化论文随笔记

这是一篇阿里妈妈的论文【KDD’23 | 转化率预估新思路:基于历史数据复用的大促转化率精准预估】 常规的销量预测,遇到一些特大事件,直播、大促,一般很难预估得准确。而且现在电商机制也比较多样,预售、平台折扣等。 本…

初识MySQL:了解MySQL特性、体系结构以及在Linux中部署MySQL

目录 MySQL简介 MySQL特性 MySQL体系结构 SQL的四个层次: 连接层: SQL层: 插件式存储引擎: 物理文件层: 一条SQL语句的执行流程: MySQL在Linux中的安装、部署 首先需要下载mysql软件包&#xff…

月入9000+的CSGO游戏搬砖项目操作细节和疑问 ?给您一一解答

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 01 海外CSGO游戏搬砖项目是什么? csgo搬砖是在外服steam上购买包含印花枪皮等等…

9.2、增量表数据同步

1、数据通道 2、Flume配置 1)Flume配置概述 Flume需要将Kafka中topic_db主题的数据传输到HDFS,故其需选用KafkaSource以及HDFSSink,Channel选用FileChannel。 需要注意的是, HDFSSink需要将不同mysql业务表的数据写到不同的路径…

2023.7.4 Dataloader切分

一、 如果文件夹路径是 path/to/folder with spaces/,使用以下方式输入 path/to/folder\ with\ spaces/或者使用引号包裹路径: "path/to/folder with spaces/"这样可以确保命令行正确解析文件夹路径,并将空格作为路径的一部分进…

ADB自动化测试框架

一、介绍 adb的全称为Android Debug Bridge,就是起到调试桥的作用,利用adb工具的前提是在手机上打开usb调试,然后通过数据线连接电脑。在电脑上使用命令模式来操作手机:重启、进入recovery、进入fastboot、推送文件功能等。简单来…

Intellij IDEA 初学入门图文教程(八) —— IDEA 在提交代码时 Performing Code Analysis 卡死

在使用 IDEA 开发过程中,提交代码时常常会在碰到代码中的 JS 文件时卡死,进度框上显示 Performing Code Analysis,如图: 原因是 IDEA 工具默认提交代码时,分析代码功能是打开的,需要通过配置关闭下就可以了…

Linux高性能网络编程:TCP底层的收发过程

今天探索高性能网络编程,但是我觉得在谈系统API之前可以先讲一些Linux底层的收发包过程,如下这是一个简单的socket编程代码: int main() {... fd socket(AF_INET, SOCKET_STREAM, 0);bind(fd, ...);listen(fd, ...);// 如何建立连接...afd …

冒泡排序法(优化与实例演示)

冒泡排序法 冒泡排序法基本介绍 冒泡排序是一种简单而经典的排序算法,它的原理是通过不断比较相邻元素的大小并交换位置,将较大(或较小)的元素逐渐“冒泡”到数组的末尾。这个过程持续进行多轮,直到整个数组按照顺序…

【Zabbix 6.0 监控系统安装和部署】

目录 一、Zabbix 介绍1、zabbix 是什么?2、zabbix 监控原理(重点)3、Zabbix 6.0 新特性4、Zabbix 6.0 功能组件1、Zabbix Server2、数据库3、Web 界面4、Zabbix Agent5、Zabbix Proxy6、Java Gateway 二、Zabbix 6.0 部署1、部署 zabbix 服务…

idea goland 插件 struct to struct

go-struct-to-struct idea goland 插件。实现自动生成 struct 间 转换代码。 https://plugins.jetbrains.com/plugin/22196-struct-to-struct/ IntelliJ plugin that Automatically generate two struct transformations through function declarations Usage define func …

【怎么实现多组输入之EOF】

C语言怎么实现多组输入之EOF C语言之EOF介绍1、什么是EOF?2、EOF的用法3、EOF的扩展3.1、scanf返回值之EOF3.2、scanf函数的返回值有以下几种情况 4、如何是实现多组输入?4.1、多组输入---- 常规写法例程14.2、多组输入---- 实现多组输入的打印例程24.3、…

不想被卷的程序员们,应该学什么?

我真的好像感慨一下,这个世界真的给计算机应届生留活路了吗? 看着周围的同学,打算搞前端、JAVA、C、C的,一个两个去跑去应聘。你以为是00后整治职场? 真相是主打一个卑微:现阶段以学习为主(工…

探寻日本区块链游戏的未来潜力

日本的区块链游戏 日本是全球范围内游戏市场人均利润最高的国家之一。其中,《My Crypto Heroes》的首次公售金额达到了 16,000 ETH。 关键要点: 日本具有强大的游戏基础,使其成为加密游戏发展的理想地区。 日本流行的加密货币游戏包括《My…

Python中jsonpath库使用,及与xpath语法区别

jsonpath库使用 pip install jsonpath 基本语法 JSONPath语法元素和对应XPath元素的对比

Work20230705

//main.c #include "uart4.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); }int main() {while(1){//将获取到的字符1发送到终端//hal_put_char(hal_get_char()1);hal_put_string…

POSTGRESQL SQL 执行用 IN 还是 EXISTS 还是 ANY

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到3群&#xff08;共…

【后端面经-计算机基础】HTTP和TCP的区别

【后端面经-计算机基础】HTTP和TCP的区别 文章目录 【后端面经-计算机基础】HTTP和TCP的区别1. OSI七层模型和相关协议2. TCP协议2.1 特点&#xff1a;2.2 报文格式2.3 三次握手和四次挥手 3. HTTP协议3.1 特点3.2 报文格式3.2 https和http 4. HTTP vs TCP5. 面试模拟参考资料 …

全网最牛,python接口自动化测试-接口sign签名(实战撸码)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一般公司对外的接…

groupkfold 报错:raise keyerror(f“{not foud} not in index“)

【1】使用groupkfold 的时候出现以上报错&#xff1a;索引错误&#xff0c;groups的索引和x y 的不对应 【2】源代码&#xff1a; 【3】进行修改&#xff1a; 可以成功索引&#xff01;&#xff01;&#xff01;