编程架构思考
admin
2023-02-10 03:20:08
0次

一、架构,作为程序员是必须的,好的架构提供代码重用的可能性(因为模块化/对象化,而且模块/对象间松散耦合),提供灵活的扩展性(方便加入其他模块和功能),代码维护性和可读性好 。
二、人类的认识总是连续性上升的,不会飞跃,所以随着时间推移,架构技术也在更新,所以你需要关心一些新的架构技术、新的通信技术、新的框架。例如ROS机器人系统第一代使用master方式,ROS2使用新的DDS技术方式。
三、其实很多技术的相似的,思想是相似的,你需要自己提炼一下,理解好,实际操作实践一下,从而提高自己水平。
四、《设计模式》是你必须学习的,设计模式其实不单单可以应用于某个程序编程,还可以应用于通信协议等等方方面面的思想上。取决于你如何提取各种事物的共性,如何思考他们的差异。永远记住:任何代码架构的问题都可以通过加入中间层解决。即模块化、对象化、去耦合。归根结底,各种设计模式就是研究把各种可能变化的设计点封装起来,以适应这种变化,从而实现代码可扩展和重用。
五、代码可以找参考的,算法可以找到参考例子,架构也可以找参考的。天下代码一大抄,并没有不妥。
六、正如写驱动,需要首先确定下层硬件接口使用的什么总线,从而确定对下使用什么总线API,然后确定要对上实现的功能,是网卡、sensor还是什么,也就可以确定对上层应用暴露的接口, 从而选择子系统,例如iio、input子系统等。也就是你得知道驱动作为架构中的一个中间层而已。同理你设计架构时得懂得分层的概念。驱动的架构相对固定,你需要思考的内容也相对固定,无非就是代码执行的上下文、函数的重入性、如何支持管理下层多设备、如何支持多个上层client等,就像神经网络的M:N网状链接关系,基本涉及《linux设备驱动模型》和《如何编写linux设备驱动》提及的那些内容。各种代码执行上下文包括中断、软中断、tasklet (基于软中断实现)、hrtimer (软中断或硬中断环境下执行)、timer (基于软中断实现)、kernel thread、普通线程内核态;代码执行过local_irq_disable、local_bh_disable、preempt_disable后的上下文。具体参考我的视频课程《linux设备驱动模型》和《如何编写linux设备驱动》。
七、linux的内存管理架构,其实就是围绕如何高效管理虚拟地址空间、物理内存。所谓高效就是随时代变迁利用各种技术做到安全、快速分配和释放、减少碎片提高分配大内存的可能性、各种方式节省物理内存(包括先文件映射后面用时才分配、写时复制等技术、ELF文件的section合并segment、linux VMA映射技术等)。具体参考我的课程《深入linux内核》和《elf file linker and loader与linux结合》

1、架构的通用性思考,《设计模式》等的松耦合,主要考虑的是通用性和可扩展性。越是通用,往往性能会有损耗,这需要权衡。
2、架构性能的思考,
(1)各种对慢设备访问的缓冲技术,cpu的cache、页表的TLB缓冲、目录项的缓冲、磁盘文件读写的内存页高速缓存、DMA访问方式;各种减少重复查找的技术和各种减少反复分配释放的技术,dlmalloc的dv记录、jemalloc的Tcache线程缓冲、kmem_cache的slab/slub/slob缓存、bitmap方式整体判断的f标记位的记录方式。
(2)各种减少拷贝技术,例如skbuff指针移动技术、写时复制技术、共享内存技术。
(3)更加高效的数据结构和算法,例如红黑树,具体参见《算法导论》
3、架构的安全性的思考,面向数据的数据安全的各种锁保护机制、数据完整性的检查、数据纠错的各种checksum方法、数据访问权限的各种保护(包括SeLinux的措施等)。
4、各种思想, 面向过程、面向对象、面向服务、面向数据,等等思想。都是你应该理解和思考的。
5、考虑到系统调用会有一定的性能损失,所以要区分进程间通信、进程内通信、机器内同一个SOC的各中子模块之间通信、不同机器(PC)间通信的不同。
(1)进程内,直接用函数直接调用、函数指针callback回调方式、queue队列传递、链表、树、hash表、全局变量等即可;没必要用socket通信、sharememory等涉及系统调用的相对低性能的方式交换数据和信息。
(2)进程间可以使用sharememory、socket等各种进程间通信方式。 同一个SOC的各个子模块,例如高通的Application arm cpu和modem dsp核模块之间,采用sharememory共享物理内存方式、总线通信方式、socket网络通信方式。
(3)不同PC机器之间采用socket网络通信方式、各种通信总线方式。

某些内容具体参考我的视频课程:
https://edu.51cto.com/lecturer/8896847.html
https://edu.51cto.com/topic/2385.html

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...