溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

編程架構(gòu)思考

發(fā)布時(shí)間:2020-07-12 11:12:19 來(lái)源:網(wǎng)絡(luò) 閱讀:159 作者:GaoNeil 欄目:移動(dòng)開(kāi)發(fā)

一、架構(gòu),作為程序員是必須的,好的架構(gòu)提供代碼重用的可能性(因?yàn)槟K化/對(duì)象化,而且模塊/對(duì)象間松散耦合),提供靈活的擴(kuò)展性(方便加入其他模塊和功能),代碼維護(hù)性和可讀性好 。
二、人類的認(rèn)識(shí)總是連續(xù)性上升的,不會(huì)飛躍,所以隨著時(shí)間推移,架構(gòu)技術(shù)也在更新,所以你需要關(guān)心一些新的架構(gòu)技術(shù)、新的通信技術(shù)、新的框架。例如ROS機(jī)器人系統(tǒng)第一代使用master方式,ROS2使用新的DDS技術(shù)方式。
三、其實(shí)很多技術(shù)的相似的,思想是相似的,你需要自己提煉一下,理解好,實(shí)際操作實(shí)踐一下,從而提高自己水平。
四、《設(shè)計(jì)模式》是你必須學(xué)習(xí)的,設(shè)計(jì)模式其實(shí)不單單可以應(yīng)用于某個(gè)程序編程,還可以應(yīng)用于通信協(xié)議等等方方面面的思想上。取決于你如何提取各種事物的共性,如何思考他們的差異。永遠(yuǎn)記住:任何代碼架構(gòu)的問(wèn)題都可以通過(guò)加入中間層解決。即模塊化、對(duì)象化、去耦合。歸根結(jié)底,各種設(shè)計(jì)模式就是研究把各種可能變化的設(shè)計(jì)點(diǎn)封裝起來(lái),以適應(yīng)這種變化,從而實(shí)現(xiàn)代碼可擴(kuò)展和重用。
五、代碼可以找參考的,算法可以找到參考例子,架構(gòu)也可以找參考的。天下代碼一大抄,并沒(méi)有不妥。
六、正如寫(xiě)驅(qū)動(dòng),需要首先確定下層硬件接口使用的什么總線,從而確定對(duì)下使用什么總線API,然后確定要對(duì)上實(shí)現(xiàn)的功能,是網(wǎng)卡、sensor還是什么,也就可以確定對(duì)上層應(yīng)用暴露的接口, 從而選擇子系統(tǒng),例如iio、input子系統(tǒng)等。也就是你得知道驅(qū)動(dòng)作為架構(gòu)中的一個(gè)中間層而已。同理你設(shè)計(jì)架構(gòu)時(shí)得懂得分層的概念。驅(qū)動(dòng)的架構(gòu)相對(duì)固定,你需要思考的內(nèi)容也相對(duì)固定,無(wú)非就是代碼執(zhí)行的上下文、函數(shù)的重入性、如何支持管理下層多設(shè)備、如何支持多個(gè)上層client等,就像神經(jīng)網(wǎng)絡(luò)的M:N網(wǎng)狀鏈接關(guān)系,基本涉及《linux設(shè)備驅(qū)動(dòng)模型》和《如何編寫(xiě)linux設(shè)備驅(qū)動(dòng)》提及的那些內(nèi)容。各種代碼執(zhí)行上下文包括中斷、軟中斷、tasklet (基于軟中斷實(shí)現(xiàn))、hrtimer (軟中斷或硬中斷環(huán)境下執(zhí)行)、timer (基于軟中斷實(shí)現(xiàn))、kernel thread、普通線程內(nèi)核態(tài);代碼執(zhí)行過(guò)local_irq_disable、local_bh_disable、preempt_disable后的上下文。具體參考我的視頻課程《linux設(shè)備驅(qū)動(dòng)模型》和《如何編寫(xiě)linux設(shè)備驅(qū)動(dòng)》。
七、linux的內(nèi)存管理架構(gòu),其實(shí)就是圍繞如何高效管理虛擬地址空間、物理內(nèi)存。所謂高效就是隨時(shí)代變遷利用各種技術(shù)做到安全、快速分配和釋放、減少碎片提高分配大內(nèi)存的可能性、各種方式節(jié)省物理內(nèi)存(包括先文件映射后面用時(shí)才分配、寫(xiě)時(shí)復(fù)制等技術(shù)、ELF文件的section合并segment、linux VMA映射技術(shù)等)。具體參考我的課程《深入linux內(nèi)核》和《elf file linker and loader與linux結(jié)合》

1、架構(gòu)的通用性思考,《設(shè)計(jì)模式》等的松耦合,主要考慮的是通用性和可擴(kuò)展性。越是通用,往往性能會(huì)有損耗,這需要權(quán)衡。
2、架構(gòu)性能的思考,
(1)各種對(duì)慢設(shè)備訪問(wèn)的緩沖技術(shù),cpu的cache、頁(yè)表的TLB緩沖、目錄項(xiàng)的緩沖、磁盤(pán)文件讀寫(xiě)的內(nèi)存頁(yè)高速緩存、DMA訪問(wèn)方式;各種減少重復(fù)查找的技術(shù)和各種減少反復(fù)分配釋放的技術(shù),dlmalloc的dv記錄、jemalloc的Tcache線程緩沖、kmem_cache的slab/slub/slob緩存、bitmap方式整體判斷的f標(biāo)記位的記錄方式。
(2)各種減少拷貝技術(shù),例如skbuff指針移動(dòng)技術(shù)、寫(xiě)時(shí)復(fù)制技術(shù)、共享內(nèi)存技術(shù)。
(3)更加高效的數(shù)據(jù)結(jié)構(gòu)和算法,例如紅黑樹(shù),具體參見(jiàn)《算法導(dǎo)論》
3、架構(gòu)的安全性的思考,面向數(shù)據(jù)的數(shù)據(jù)安全的各種鎖保護(hù)機(jī)制、數(shù)據(jù)完整性的檢查、數(shù)據(jù)糾錯(cuò)的各種checksum方法、數(shù)據(jù)訪問(wèn)權(quán)限的各種保護(hù)(包括SeLinux的措施等)。
4、各種思想, 面向過(guò)程、面向?qū)ο?、面向服?wù)、面向數(shù)據(jù),等等思想。都是你應(yīng)該理解和思考的。
5、考慮到系統(tǒng)調(diào)用會(huì)有一定的性能損失,所以要區(qū)分進(jìn)程間通信、進(jìn)程內(nèi)通信、機(jī)器內(nèi)同一個(gè)SOC的各中子模塊之間通信、不同機(jī)器(PC)間通信的不同。
(1)進(jìn)程內(nèi),直接用函數(shù)直接調(diào)用、函數(shù)指針callback回調(diào)方式、queue隊(duì)列傳遞、鏈表、樹(shù)、hash表、全局變量等即可;沒(méi)必要用socket通信、sharememory等涉及系統(tǒng)調(diào)用的相對(duì)低性能的方式交換數(shù)據(jù)和信息。
(2)進(jìn)程間可以使用sharememory、socket等各種進(jìn)程間通信方式。 同一個(gè)SOC的各個(gè)子模塊,例如高通的Application arm cpu和modem dsp核模塊之間,采用sharememory共享物理內(nèi)存方式、總線通信方式、socket網(wǎng)絡(luò)通信方式。
(3)不同PC機(jī)器之間采用socket網(wǎng)絡(luò)通信方式、各種通信總線方式。

某些內(nèi)容具體參考我的視頻課程:
https://edu.51cto.com/lecturer/8896847.html
https://edu.51cto.com/topic/2385.html

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI