技術演進中的開發沉思-75 Linux系列:中斷和與windows中斷的區分

作為一名從 2000 年走過來的老程序員,看著 IT 技術從桌面開發迭代到微服務時代,始終覺得好技術就像老故事 —— 得有骨架(知識點),更得有血肉(場景與感悟)。我想正是我的經歷也促成了我想寫這個長篇系列的動機,Linux系統也是我的技術經歷的一部分。今天梳理其中的?“中斷和異常”,像聊當年項目里應對突發狀況的經歷一樣,一起梳理 Linux 系統里 “應急機制” 的門道。

一、中斷和異常

如果把 Linux 系統比作一個 24 小時運轉的工廠,那 “中斷和異常” 就是工廠里的 “應急調度員”。早年做嵌入式開發時,我曾遇到過一個奇葩問題:鍵盤按了沒反應,但程序還在跑。后來查了三天才發現,是中斷優先級設錯了 —— 鍵盤的 “中斷信號” 被串口設備的信號蓋住了,就像車間里機床的報警聲蓋過了質檢員的呼喊,次品自然沒人處理。

從那以后我才懂:中斷是系統的 “緊急呼叫”,異常是系統的 “自我檢查”,沒了這倆角色,系統就是個 “埋頭干活不看路” 的愣頭青,早晚會出大問題。

1、?“緊急情況” 的類型

Linux 系統面對的 “突發狀況” 分三類,就像工廠里的緊急事件各有不同應對方式,咱們結合當年的開發經歷慢慢說:

1.1 、外中斷

外中斷是外部設備給系統發的 “請求信號”,比如鍵盤按鍵、鼠標點擊、硬盤讀完數據、網卡收到數據包。這就像工廠里,原材料到了(硬盤讀數據)、客戶來提貨(網卡收數據),倉庫管理員得趕緊通知車間調度 —— 系統收到外中斷,也得停下手里的活,先處理這些 “外來需求”。

我剛參加工作那年,曾參與過用proc c在unix上開發營業廳終端應用。有次客戶反饋,打印機打印到一半突然停了,屏幕沒任何提示。我跑到客戶機房,盯著 Linux 系統的中斷日志看了才發現打印機缺紙后或者出現卡紙,由于營業廳的打印設備并不在客戶視線范圍內,所以也沒有提示。就發了外中斷信號,但驅動程序沒處理 —— 就像倉庫管理員喊 “沒包裝紙了”,車間調度沒聽見,工人還在傻等。后來我在驅動里加了 “外中斷監聽”,一旦收到缺紙信號,立刻彈出提示,問題才解決。

現在想起來,外中斷的本質就是 “設備與系統的對話” —— 設備不會說話,只能靠中斷信號 “敲門”,系統要是沒聽見,設備就成了 “啞巴”,用戶自然會覺得 “這系統不好用”。

1.2、內中斷

內中斷是 CPU 自己干活時出的問題,比如算除法時除數為 0、內存地址越界、指令執行出錯。這就像工廠里的工人,算產品數量時把 “除以 2” 算成 “除以 0”,或者拿錯了零件 —— 必須立刻停下,不然會出廢品。

記得我曾踩過一個內中斷的大坑。當時系統要計算客戶的積分,有個邏輯是 “積分 = 消費金額 / 會員等級”,結果有個新用戶的會員等級是 0,程序執行到除法時,直接觸發了內中斷,整個財務進程崩潰了。后來我突然明白:內中斷不是 “系統找茬”,而是 “CPU 在提醒你:這里有 bug,快修!”后來我在代碼里加了 “會員等級校驗”,只要等級為 0,就默認按 1 計算,同時記錄日志 —— 這就像給工人配了 “檢查清單”,先確認零件對不對,再動手干活。從那以后,我寫代碼時總會多問一句:“會不會出現讓 CPU 犯難的情況?”

1.3、異常

異常比內中斷更特殊,它不是 “錯誤”,而是 “計劃外的情況”,比如程序想訪問 “不存在的內存”(像工人找錯了倉庫)、執行了非法指令(像用錯了工具)、或者需要系統提供特殊服務(像工人需要找廠長簽字)。

在?Web 2.0時代做 項目時,遇到過一個典型的 “缺頁異常”。當時用戶上傳的圖片要存在內存里處理,但有些圖片太大,內存放不下,程序訪問指定內存地址時,發現 “這塊內存沒分配”,就觸發了異常。一開始我以為是程序崩了,后來查資料才懂:Linux 系統會處理這種異常 —— 先把內存里暫時不用的數據寫到硬盤,騰出空間,再把圖片數據加載到內存,讓程序繼續運行,用戶完全感覺不到 “卡殼”。

記得有次我們為運營系統的開發的風控系統,通過日志我發現,有個黑客嘗試用非法指令繞過密碼校驗,結果觸發了 “非法指令異常”,系統直接終止了登錄進程,還記錄了 IP 地址。那時候我才覺得:異常就像系統的 “保安”,既會幫合法用戶 “解決麻煩”(缺頁異常),又會攔住 “不懷好意的人”(非法指令),是系統里最有 “人情味” 的機制。

2、中斷處理程序

不管是中斷還是異常,都不能亂處理 —— 就像工廠里的緊急事件,得先報警、再救人、最后清理現場,有固定流程。Linux 里的 “中斷處理程序” 就是這套流程,還專門分了 “上半部分” 和 “下半部分”,像醫生看病一樣,分輕重緩急。

2.1、上半部分

上半部分是中斷發生時必須立刻處理的事,核心要求是 “快” —— 比如確認 “是哪個設備發的中斷”“保存當前的工作狀態”“關閉同類中斷防止干擾”,就像醫生給病人止血,一秒都不能耽誤。

我做移動互聯網項目時,處理過網卡的中斷。當時 APP 需要實時接收后臺推送的消息,網卡收到數據包后會發中斷信號。如果上半部分處理慢了,新的數據包就會堆積,導致消息延遲。那時候我把上半部分的代碼精簡到了極致:只做三件事 —— 確認是網卡中斷、保存當前 CPU 寄存器數據、通知下半部分處理,整個過程控制在幾微秒內。

現在想起來,上半部分的邏輯就像 “緊急響應口訣” —— 不管后面有多少活,先把 “緊急的第一步” 做好,別讓小問題變成大麻煩。早年做嵌入式開發時,有個同事就是因為在上半部分加了 “統計數據包數量” 的邏輯,導致處理變慢,結果丟了大量數據,最后只能重構代碼。

2.2、下半部分

下半部分是不緊急但需要細致處理的事,比如解析網卡收到的數據包、處理鍵盤輸入的字符、統計設備的工作次數。就像醫生止血后,再慢慢檢查傷口、縫針、開藥方 —— 不用急,但要做扎實。

還是說移動互聯網項目的例子,網卡中斷的下半部分,我們做了三件事:解析數據包里的消息內容、校驗消息完整性、把消息推給 APP 的消息隊列。這些活要是放在上半部分做,會占用大量 CPU 時間,導致其他中斷沒法處理。但放在下半部分,系統可以在空閑時慢慢處理,既不耽誤緊急事,又能把活干細。

有次上線后,用戶反饋 “消息偶爾會亂碼”,我們查了半天,發現是下半部分解析數據包時,沒處理 “字節序” 問題。后來在代碼里加了 “字節序轉換”,問題就解決了。這也讓我明白:下半部分雖然不用急,但不能 “馬虎” —— 就像醫生縫針,針腳歪了會留疤,代碼寫差了會出 bug。

三、臨時調度

有些時候,系統會遇到 “不算緊急但需要快速處理” 的臨時任務,比如網絡數據的分片處理、定時器的超時提醒、磁盤 IO 的完成通知。這些任務要是用普通中斷處理,太浪費資源;要是用進程處理,又太慢 —— 這時候就需要 “軟中斷” 和 “tasklet” 這兩個 “臨時調度員”。

3.1、?軟中斷

軟中斷是用軟件模擬的中斷,它不像硬中斷那樣有硬件信號觸發,而是由系統在空閑時主動調用。它的最大特點是 “能并行處理” —— 多個軟中斷可以在不同 CPU 核心上同時運行,就像工廠里的多個臨時助理,各自處理不同的小事,效率很高。

早年做微服務時,我們用軟中斷處理 “服務健康檢查”。每個微服務每隔 10 秒要向注冊中心發送 “心跳包”,這個任務不算緊急,但需要準時。如果用進程處理,每個服務都要開一個進程,太浪費內存;用硬中斷,又沒必要。最后我們用了軟中斷:系統每隔 10 秒觸發一次軟中斷,批量處理所有服務的心跳包發送 —— 就像助理每隔 10 分鐘,把所有需要簽字的文件集中送過去,不用跑一趟送一個。

軟中斷的缺點也很明顯:如果多個軟中斷要修改同一份數據,會出現 “數據競爭”。比如兩個軟中斷同時修改 “服務在線數量”,可能會導致計數錯誤 —— 這就像兩個助理同時改一份報表,越改越亂。

3.2、tasklet

為了解決軟中斷的 “數據競爭” 問題,Linux 里有了 “tasklet” —— 它是軟中斷的 “特殊版本”,同一時間只能有一個 tasklet 運行,不管有多少 CPU 核心。就像給重要文件加了 “鎖”,只能一個人改完,另一個人才能改。

還是說微服務的例子,我們用 tasklet 處理 “服務在線數量更新”。每當有服務上線或下線,就觸發一個 tasklet,由它來修改在線數量。這樣不管有多少服務同時變動,都只會有一個 tasklet 在處理計數,不會出現 “多個人改同一份報表” 的問題。

我還記得有次上線新功能,一下子有 20 個服務同時重啟,觸發了 20 個 tasklet。但系統很順暢,沒有出現計數錯誤 —— 這時候我才真正懂了 tasklet 的價值:它不是 “拖慢效率”,而是 “保證準確”。在技術里,有時候 “穩” 比 “快” 更重要。

四、工作隊列

還有些任務,既不緊急,又很耗時間 —— 比如把日志寫入硬盤、清理系統的臨時文件、備份用戶數據。這些活要是交給中斷處理程序,會占用大量 CPU 時間,導致緊急中斷沒法處理;要是交給普通進程,又容易被遺忘。這時候,“工作隊列” 就派上用場了。

工作隊列就像工廠里的 “第二天待辦清單” —— 當天收工前,把不急的活記下來,第二天上班后,由專門的 “工作線程” 慢慢處理。它的核心邏輯是 “延遲執行,不占緊急資源”。

創業做日志系統時,我們就用了工作隊列。一開始,每條日志產生后,我們都立刻寫入硬盤,結果硬盤 IO 被占滿,導致其他進程讀寫數據變慢。后來改成工作隊列:把日志先存在內存的緩沖區里,每隔 5 分鐘,工作隊列觸發一次,把緩沖區里的日志批量寫入硬盤。這樣一來,硬盤不用頻繁讀寫,系統整體速度快了不少。

有次系統出了故障,需要查前一天的日志,我打開日志文件,發現所有日志都完整保存著 —— 這時候我才覺得:工作隊列就像 “細心的倉庫管理員”,雖然不會立刻處理你的需求,但會把該做的事記下來,一個都不會漏。它也讓我明白:技術里的 “延遲” 不是 “偷懶”,而是 “更合理的安排”。

四、與windows中斷的區別

昨天寫進程時加了一章與windows進程的區分,有讀者跟我反饋這部分內容很好,能讓他們能夠加以區分。我想在linux系列中我都會在相應篇幅加這個對比環節,也是便于我們更好的理解不同操作系統的處理。?

?4.1、核心 “管理者” 的差異?

  • Windows:硬件抽象層(HAL)“一言堂”?

Windows 把中斷的硬件交互全封裝在 HAL 里,不管你是 Intel 還是 AMD 的 CPU,驅動程序都只跟 HAL 打交道,不用管底層硬件細節。就像超市里的 “統一收銀臺”,不管你賣蔬菜還是水果,都得走這個通道。早年做 Windows 打印機驅動時,我只需要調用 HAL 提供的HalRequestInterrupt函數申請中斷,不用關心打印機的中斷線怎么跟 CPU 連 —— 這雖然方便,但遇到特殊硬件(比如工業設備的自定義中斷),就像超市不讓賣 “非標商品”,特別別扭。?

  • Linux:“直接對話” 硬件,靈活但要操心?

Linux 沒有 HAL 這種 “中間商”,驅動程序可以直接操作中斷控制器(比如早期的 8259A、現在的 APIC)。就像菜市場攤主能直接跟供貨商對接,不用經過超市管理層。我創曾為了優化中斷響應速度,直接修改了 Linux 內核里的中斷控制器配置,把鍵盤中斷優先級調高 —— 這在 Windows 里根本不可能,因為 HAL 把硬件操作全封死了。但代價是 “操心”:換個 CPU 架構(比如從 x86 換到 ARM),中斷處理代碼就得重調,不像 Windows 那樣 “一次編寫,多平臺兼容”。?

4.2、?中斷 “權限” 的開放程度?

  • Windows:“封閉花園”,驅動受限多?

Windows 對中斷的權限控制極嚴,普通驅動不能修改中斷優先級,也不能自定義中斷處理流程。就像超市規定 “只能按標價賣,不能討價還價”。早年做 Windows 服務器驅動時,想給網卡中斷加個自定義的 “下半部分處理”,結果發現微軟只允許用它提供的 “延遲過程調用(DPC)”,根本沒法像 Linux 那樣自己寫軟中斷 —— 這雖然能減少驅動沖突,但也綁死了開發者的手腳。?

  • Linux:“開放社區”,開發者有主動權?

Linux 允許驅動程序動態調整中斷優先級(比如用irq_set_priority函數),還能自定義軟中斷、tasklet 的處理邏輯。就像菜市場允許攤主 “靈活定價”。我做微服務服務器時,曾給數據庫驅動加了個自定義軟中斷,專門處理 SQL 查詢的中斷響應 —— 這在 Windows 里完全做不到,但 Linux 里只需要幾行代碼就能實現。不過開放也有代價:早年有個同事寫驅動時亂改中斷優先級,導致系統崩潰,就像菜市場攤主亂漲價,攪亂了整個市場秩序。?

處理中斷的流程,倆系統的思路也完全不同。Linux 追求 “靈活分工”,Windows 追求 “標準化效率”—— 這跟我當年做項目的兩種模式很像:小作坊里大家分工靈活,能隨時調整;流水線工廠按固定流程走,效率高但改不了。?

4.3、 中斷處理的 “前后分工”?

  • Linux:“上半部分 + 下半部分”,分工靈活?

Linux 把中斷處理分成 “上半部分(緊急處理)” 和 “下半部分(非緊急處理)”,就像小作坊里 “師傅先處理緊急訂單,徒弟再做后續加工”。比如網卡收到數據,上半部分只做 “確認中斷、保存數據”,下半部分再解析數據包 —— 這種分工特別靈活,開發者能根據需求調整上下半部分的比例。我早年做 Web 2.0 項目時,曾把 “數據包校驗” 從下半部分移到上半部分,只為了減少數據延遲,雖然增加了上半部分的負擔,但能滿足項目需求 —— 這在 Windows 里根本做不到,因為它的流程是固定的。?

  • Windows:“中斷服務例程(ISR)+ 延遲過程調用(DPC)”,流程固定?

Windows 的中斷處理是 “ISR(緊急處理)+ DPC(延遲處理)”,就像流水線工廠 “第一步必須做組裝,第二步必須做檢測”,不能亂改順序。ISR 只能做最緊急的事(比如確認中斷、保存寄存器),而且微軟嚴格限制 ISR 的執行時間(不能超過 100 微秒),剩下的活全交給 DPC。我做 Windows 音頻驅動時,ISR 只能確認 “音頻數據到了”,解析數據、播放控制全得靠 DPC—— 這雖然能保證系統穩定,但遇到需要 “緊急處理后續邏輯” 的場景(比如實時音頻的低延遲需求),就像流水線卡殼,特別難受。?

4.4、 多中斷 “調度” 邏輯?

  • Linux:“搶占式” 調度,緊急中斷優先?

Linux 的中斷調度是 “搶占式” 的,高優先級中斷能打斷低優先級中斷的處理。就像小作坊里來了緊急訂單,師傅能放下手里的活先處理。我做嵌入式設備時,把 “緊急報警” 的中斷優先級設為最高,哪怕系統正在處理鍵盤中斷,只要報警信號來,就能立刻打斷 —— 這在工業場景里特別重要,能保證緊急情況不被耽誤。?

  • Windows:“非搶占式” 為主,避免混亂?

Windows 的 ISR 默認是 “非搶占式” 的,除非是更高優先級的硬件中斷,否則不能打斷正在運行的 ISR。就像流水線工廠規定 “正在生產的產品不能中途停下”,哪怕來了新訂單,也得等當前產品做完。早年做 Windows 串口驅動時,遇到過 “低優先級中斷堵死高優先級中斷” 的問題:串口中斷正在處理數據,鍵盤中斷來了也得等 —— 后來才知道,Windows 這么設計是為了減少中斷沖突,但在實時性要求高的場景(比如工業控制),就會出大問題。?

為了處理不同場景的中斷,倆系統都有輔助機制,但 Linux 的輔助工具更 “小巧靈活”,Windows 的更 “全面標準化”—— 這像我當年用的兩種工具箱:Linux 的工具箱里全是小扳手、小螺絲刀,能修各種小問題;Windows 的工具箱里是大套裝,能應對標準場景,但不適合修 “非標設備”。?

4.5、 軟中斷與 “延遲處理”?

  • Linux:軟中斷、tasklet、工作隊列,按需選擇?

Linux 有軟中斷、tasklet、工作隊列三種延遲處理機制,就像小作坊里有 “臨時助理(軟中斷)”、“專屬師傅(tasklet)”、“第二天處理的待辦清單(工作隊列)”,能根據需求選。比如處理網絡數據用軟中斷(并行高效),處理共享數據用 tasklet(避免沖突),處理日志寫入用工作隊列(延遲執行)—— 我創業做日志系統時,就是用工作隊列批量寫日志,既不耽誤緊急中斷,又能提高效率。?

  • Windows:DPC + 工作項,標準化但選擇少?

Windows 只有 “延遲過程調用(DPC)” 和 “工作項(Work Item)” 兩種延遲機制,就像工廠里只有 “流水線延遲工序(DPC)” 和 “倉庫待處理(Work Item)”,選擇很少。DPC 對應 Linux 的軟中斷,但不能自定義優先級;工作項對應 Linux 的工作隊列,但只能在系統線程里運行。我做 Windows 文件系統驅動時,想給 DPC 加個自定義優先級,結果發現微軟根本不允許 —— 這雖然能保證標準化,但遇到特殊場景,就像用大扳手擰小螺絲,特別不方便。?

4.6、中斷 “調試” 工具?

  • Linux:“開源工具箱”,調試透明?

Linux 有各種開源調試工具,比如cat /proc/interrupts能看中斷統計,irqtop能實時監控中斷占用,甚至能直接改內核代碼加調試日志。就像小作坊里能隨時打開機器看內部結構,有問題能立刻排查。早年調試 Linux 中斷沖突時,我用/proc/interrupts發現串口中斷占用率高達 90%,很快就定位到是驅動里的死循環 —— 這在 Windows 里根本做不到,因為微軟不開放內核調試的底層接口。?

  • Windows:“封閉調試”,依賴官方工具?

Windows 只能用微軟提供的 “內核調試器(WinDbg)” 調試中斷,而且很多底層信息(比如中斷控制器狀態)看不到。就像工廠里只能用官方提供的檢測工具,看不到機器內部的細節。我早年排查 Windows 藍屏問題時,WinDbg 只提示 “中斷處理錯誤”,但沒法看具體是哪個中斷控制器出了問題,最后只能靠猜 —— 這也是很多開發者覺得 Windows 中斷調試 “頭疼” 的原因。

最后小結:

今天梳理的是linux下的中斷,做了二十多年技術,從桌面開發到微服務,我越來越覺得:中斷和異常不是 Linux 系統的 “附加功能”,而是它的 “生存智慧”。

中斷教會我們:做事要分輕重緩急 —— 就像當年帶項目,遇到突發問題,先解決 “會導致項目停工” 的緊急事,再處理 “不影響進度” 的小事。異常教會我們:要接受 “計劃外的情況”,并做好應對 —— 就像創業時,總會遇到沒預料到的風險,關鍵不是避免風險,而是有能力化解風險。

軟中斷和 tasklet 告訴我們:協作要講 “規則” —— 并行處理能提高效率,但該 “鎖” 的時候必須 “鎖”,不然會亂套。工作隊列則告訴我們:不用事事追求 “立刻完成” —— 有些事慢一點,反而能讓整體更順暢。

這些道理,既適用于 Linux 系統,也適用于我們的職場和生活。Linux 系統的應急機制,和我們應對生活突發狀況的邏輯,其實是相通的 —— 分清輕重、做好規劃、靈活應對,才能走得穩、走得遠。未完待續.......

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919814.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【8位數取中間4位數】2022-10-23

緣由請輸入一個8位的十進制整數,編寫程序取出該整數的中間4位數,分別輸出取出的這4位數以及該4位數加上1024的得數。 輸入:一個整數。 輸出:兩個整數,用空格分隔-編程語言-CSDN問答 int n 0;std::cin >> n;std:…

mac電腦使用(windows轉Mac用戶)

首先,我們學習mac的鍵盤復制 command c 粘貼 command v 剪切 command xlinux命令行 退出中止 control c 退出后臺 control d中英文切換大小寫,按住左邊向上的箭頭 字母鼠標操作 滾輪:2個指頭一起按到觸摸板,上滑,…

項目中優惠券計算邏輯全解析(處理高并發)

其實這個部分的代碼已經完成一陣子了,但是想了一下決定還是整理一下這部分的代碼,因為最開始做的時候業務邏輯還是感覺挺有難度的整體流程概述優惠方案計算主要在DiscountServiceImpl類的findDiscountSolution方法中實現。整個計算過程可以分為以下五個步…

支持電腦課程、游戲、會議、網課、直播錄屏 多場景全能錄屏工具

白鯊錄屏大師:支持電腦課程、游戲、會議、網課、直播錄屏 多場景全能錄屏工具,輕松捕捉每一刻精彩 在數字化學習、娛樂與辦公場景中,高質量的錄屏需求日益增長。無論是課程內容的留存、游戲高光的記錄,還是會議要點的復盤、網課知…

LeetCode算法日記 - Day 20: 兩整數之和、只出現一次的數字II

目錄 1. 兩數之和 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 只出現一次的數字II 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 兩數之和 371. 兩整數之和 - 力扣(LeetCode) 給你兩個整數 a 和 b ,不使用 運算符 和 - ,計算并…

Spring AI 快速接入 DeepSeek 大模型

Spring AI 快速接入 DeepSeek 大模型 文章目錄Spring AI 快速接入 DeepSeek 大模型Spring AI 框架概述核心特性適用場景官網與資源AI 提供商與模型類型模型類型(Model Type)AI提供商(Provider)兩者的關系Spring AI 框架支持哪些 A…

jQuery 知識點復習總覽

文章目錄jQuery 知識點復習總覽一、jQuery 基礎1. jQuery 簡介2. jQuery 引入3. jQuery 核心函數二、選擇器1. 基本選擇器2. 層級選擇器3. 過濾選擇器4. 表單選擇器三、DOM 操作1. 內容操作2. 屬性操作3. CSS 操作4. 元素操作四、事件處理1. 事件綁定2. 事件對象3. 自定義事件五…

博客系統接口自動化練習

框架圖: 詳細代碼地址:gitee倉庫 博客系統接口自動化文檔請看文章頂部。

智慧礦山誤報率↓83%!陌訊多模態融合算法在礦用設備監控的落地優化

原創聲明:本文為原創技術解析文章,核心技術參數與架構設計引用自 “陌訊技術白皮書(智慧礦山專項版)”,算法部署相關資源適配參考aishop.mosisson.com平臺的陌訊視覺算法專項適配包,禁止未經授權的轉載與二…

Laravel 使用阿里云OSS S3 協議文件上傳

1. 安裝 S3 軟件包 composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies2. 配置.env 以阿里云 OSS 地域華東2 上海為例: FILESYSTEM_DISKs3 //設置默認上傳到S3AWS_ACCESS_KEY_ID***…

UVM一些不常用的功能

uvm_coreservice_t是什么AI:在 UVM(Universal Verification Methodology)中,uvm_coreservice_t 是一個核心服務類,它扮演著UVM 框架內部核心服務的 “管理者” 和 “統一入口” 的角色。其主要作用是封裝并提供對 UVM …

怎么確定mongodb是不是鏈接上了?

現有mongosh鏈接了MongoDB,里面能操作,但是想python進行鏈接,因為代碼需要,現在測試下鏈接成功了沒有。如下: 要確認你的 MongoDB 連接是否成功,可以通過以下方法檢查: 1. 使用 list_database_names 方法【測試成功】 python import asyncioasync def test_connecti…

Unity 二進制讀寫小框架

文章目錄前言框架獲取與集成使用方法基本配置自動生成序列化方法實戰示例技術原理與優勢二進制序列化的優勢SJBinary的設計特點最佳實踐建議適用場景總結前言 在Unity開發過程中,與后臺交互時經常需要處理大型數據文件。當遇到一個近2MB的本地JSON文件需要解析為對…

?Kubernetes 詳解:云原生時代的容器編排與管理

一 Kubernetes 簡介及部署方法 1.1 應用部署方式演變 在部署應用程序的方式上,主要經歷了三個階段: 傳統部署:互聯網早期,會直接將應用程序部署在物理機上 優點:簡單,不需要其它技術的參與 缺點&#xf…

Kotlin 中的枚舉類 Enum Class

枚舉類在 Kotlin 中是非常強大和靈活的工具,可以用于表示一組固定的常量,并且可以包含屬性、方法、構造函數和伴生對象。它們在處理狀態、選項等場景中非常有用。 1、枚舉類的定義 枚舉類用于創建具有一組數量有限的可能值的類型。 枚舉的每個可能值都稱為“枚舉常量”。每個…

集成電路學習:什么是K-NN最近鄰算法

K-NN:最近鄰算法 K-NN,即K-最近鄰算法(K-Nearest Neighbor algorithm),是一種基本的監督學習算法,廣泛應用于分類和回歸問題中。以下是對K-NN算法的詳細解析: 一、K-NN算法的基本原理 1、K-NN算法的核心思想是: 對于一個新的數據點,算法會在訓練數據集中找到與…

2025最新版mgg格式轉MP3,mflac轉mp3,mgg格式如何轉mp3?

注:需要使用舊版客戶端,并需要禁用更新。使用說明內有鏈接打開軟件,可以選擇將待轉換的歌曲拖入;或者點擊添加將mgg或者mflac歌曲拖入點擊開始轉換等待一會就轉換完成,默認轉換后的歌曲存在桌面的【轉換成功】的文件夾…

嵌入式學習day34-網絡-tcp/udp

day33練習:客戶端 與 服務器實現一個點對點聊天tcp客戶端clifd socketconnect//收 --父進程 //發 --子進程 tcp服務器 listenfd socketbindlistenconnfd accept()//收 -- 父進程 //發 -- 子進程client.c#include "../head.h"int res_fd[1]; // 只需要存…

零知開源——基于STM32F103RBT6與ADXL362三軸加速度計的體感迷宮游戲設計與實現

?零知IDE 是一個真正屬于國人自己的開源軟件平臺,在開發效率上超越了Arduino平臺并且更加容易上手,大大降低了開發難度。零知開源在軟件方面提供了完整的學習教程和豐富示例代碼,讓不懂程序的工程師也能非常輕而易舉的搭建電路來創作產品&am…

《Linux 網絡編程一:網絡編程導論及UDP 服務器的創建與數據接收》

Linux下的網絡編程1. 目的實現不同主機之間進程的通信。2. 問題主機之間在物理層面必須互聯互通。進程之間在軟件層面必須互聯互通。IP地址:計算機的軟件地址,用于標識計算機設備。MAC地址:計算機的硬件地址(固定)。網…