微軟圖引擎GraphEngine深度解析:分布式內存計算的技術革命

?

"在大數據的汪洋中,圖引擎就像是一艘能夠高速穿越復雜關系網絡的超級快船"

引言:當內存遇上圖計算的火花

在這個數據爆炸的時代,傳統的關系型數據庫已經難以應對復雜關系數據的查詢挑戰。當Facebook的社交網絡擁有數十億用戶關系,當推薦系統需要實時分析用戶行為圖譜,當知識圖譜成為AI的重要基礎設施時,我們迫切需要一種全新的數據處理范式。

微軟Graph Engine(Trinity)就是在這樣的背景下誕生的一顆技術明珠。它不僅僅是一個圖數據庫,更是一個革命性的分布式內存計算平臺,將圖計算的性能推向了一個全新的高度。

本文將帶你深入探索Graph Engine的技術內核,從分布式內存云到TSL語言設計,從LIKQ查詢引擎到性能優化策略,為你揭示這個"內存中的圖宇宙"是如何構建的。

第一章:技術架構的藝術——分層設計的智慧

1.1 整體架構概覽

Graph Engine采用了一種極其優雅的分層架構設計,如同一座精心設計的摩天大樓,每一層都有其獨特的職責和價值:

┌─────────────────────────────────────┐
│????????應用層?(LIKQ,?用戶應用)????????│
├─────────────────────────────────────┤
│????TSL語言層?(類型系統與代碼生成)?????│
├─────────────────────────────────────┤
│??????計算引擎層?(分布式計算框架)??????│
├─────────────────────────────────────┤
│????內存云層?(Memory?Cloud)???????????│
├─────────────────────────────────────┤
│??????網絡通信層?(消息傳遞框架)????????│
├─────────────────────────────────────┤
│????底層存儲層?(本地內存管理)??????????│
└─────────────────────────────────────┘

這種分層設計的精妙之處在于,每一層都可以獨立演進,同時通過清晰的接口實現層間協作。

1.2 Memory Cloud:分布式內存的奇跡

Memory Cloud是Graph Engine的核心創新,它將整個集群的內存統一為一個全局可尋址的地址空間。這個設計堪稱分布式系統的一個重大突破。

內存分區策略

每臺機器的內存被劃分為256個Memory Trunk(內存塊),這個數字的選擇絕非偶然:

//?核心內存管理結構
class?MemoryTrunk?{
private:char*?trunkPtr;????????????????????//?內存塊指針MTHash*?hashtable;?????????????????//?哈希表std::atomic<uint32_t>?committed_tail;??//?已提交尾部TrinityLock*?split_lock;???????????//?分片鎖TrinityLock*?alloc_lock;???????????//?分配鎖//?...?更多字段
public:enum?UInt32_Constants?:?uint32_t?{TrunkLength?=?0x80000000,??????//?2GBMaxLargeObjectSize?=?0x40000000?//?1GB};
};

這種設計帶來了兩個核心優勢:

  1. 無鎖并行:Trunk級別的并行可以在沒有鎖開銷的情況下實現

  2. 哈希優化:相比單一大哈希表,多個小哈希表減少了沖突概率

全局尋址機制

Graph Engine使用64位全局唯一標識符作為Key,通過一套精妙的尋址算法實現跨機器的數據定位:

//?分布式存儲抽象
public?abstract?class?MemoryCloud?:?IKeyValueStore?{public?abstract?bool?IsLocalCell(long?cellId);public?abstract?int?MyPartitionId?{?get;?}public?abstract?int?PartitionCount?{?get;?}//?核心尋址邏輯protected?int?GetPartitionId(long?cellId)?{return?(int)(cellId?%?PartitionCount);}
}

1.3 網絡通信:高效的消息傳遞框架

Graph Engine實現了一套高性能的網絡通信框架,支持多種消息類型:

public?enum?TrinityMessageType?:?ushort?{SYNC?=?0,??????????????//?同步消息SYNC_WITH_RSP?=?1,?????//?帶響應的同步消息ASYNC?=?2,?????????????//?異步消息ASYNC_WITH_RSP?=?3,????//?帶響應的異步消息
}

這套框架的精髓在于其Request-Response模式的實現,確保了消息傳遞的可靠性和高效性。

第二章:TSL語言——類型安全的數據建模革命

2.1 TSL的設計哲學

Trinity Specification Language (TSL) 是Graph Engine的另一個重大創新。它不僅僅是一個數據定義語言,更是一個完整的類型系統和代碼生成框架。

TSL的設計理念可以用一句話概括:讓類型系統為性能服務

2.2 類型系統設計

TSL支持豐富的數據類型:

// TSL語法示例
cell struct Character {String Name;           // 字符串類型byte Gender;          // 基礎類型bool Married;         // 布爾類型long Spouse;          // 引用類型long Performer;       // 圖邊關系
}cell struct Performer {String Name;int Age;List<long> Characters; // 容器類型
}

2.3 代碼生成魔法

TSL編譯器會為每個定義的類型生成完整的C#代碼,包括:

  1. 高性能訪問器:直接操作內存的訪問接口

  2. 序列化/反序列化代碼:零拷貝的數據轉換

  3. 類型安全的API:編譯時類型檢查

這種設計的巧妙之處在于,開發者只需要關注數據模型,而性能優化的重任完全交給了編譯器。

2.4 內存布局優化

TSL編譯器會根據數據類型自動優化內存布局,實現最佳的緩存友好性:

//?生成的內存訪問代碼(簡化版)
class?CharacterAccessor?{
private:char*?m_ptr;??//?指向實際數據的指針public:String?GetName()?{return?*(String*)(m_ptr?+?NAME_OFFSET);}void?SetName(const?String&?value)?{*(String*)(m_ptr?+?NAME_OFFSET)?=?value;}
};

第三章:LIKQ查詢引擎——圖遍歷的藝術

3.1 LIKQ的獨特之處

Language Integrated Knowledge Query (LIKQ) 是Graph Engine的查詢語言,它將圖遍歷與Lambda表達式完美結合:

//?LIKQ查詢示例
var?result?=?KnowledgeGraph.StartFrom(rachels_id).FollowEdge("friends").VisitNode(action:?node?=>?{//?服務端計算邏輯if?(node.Gender?==?0?&&?node.Married)?{//?處理邏輯}}).Select("Name",?"Age");

3.2 分布式查詢執行

LIKQ查詢引擎的核心在于其分布式執行策略:

//?查詢描述符
public?class?FanoutSearchDescriptor?{private?List<Expression>?m_traverseActions;private?string?m_queryPath;//?核心執行邏輯public?void?Execute()?{//?1.?查詢編譯var?compiledQuery?=?CompileQuery();//?2.?分布式執行計劃var?executionPlan?=?CreateDistributedPlan();//?3.?并行執行ExecuteInParallel(executionPlan);}
}

3.3 表達式序列化

LIKQ的一個技術亮點是能夠將C# Lambda表達式序列化后發送到遠程節點執行:

//?表達式序列化機制
public?class?JsonExpressionSerializer?{public?string?Serialize(Expression?expr)?{//?將表達式樹轉換為JSONreturn?JsonConvert.SerializeObject(expr);}public?Expression?Deserialize(string?json)?{//?從JSON重建表達式樹return?JsonConvert.DeserializeObject<Expression>(json);}
}

第四章:性能優化的藝術——微秒級的追求

4.1 內存管理策略

Graph Engine在內存管理方面采用了多項創新技術:

大頁面支持
namespace?Memory?{const?uint64_t?TrinityMaxWorkingSet?=?68719476736;?//?64GBvoid*?LargePageAlloc(uint32_t?page_num)?{//?使用大頁面減少TLB?missreturn?VirtualAlloc(NULL,?page_num?*?LargePageMinimum,?MEM_COMMIT?|?MEM_LARGE_PAGES,?PAGE_READWRITE);}
}
內存鎖定
void*?LockedAlloc(uint64_t?size)?{void*?ptr?=?VirtualAlloc(NULL,?size,?MEM_COMMIT,?PAGE_READWRITE);if?(ptr?&&?!VirtualLock(ptr,?size))?{VirtualFree(ptr,?0,?MEM_RELEASE);return?nullptr;}return?ptr;
}

4.2 緩存友好的數據結構

Graph Engine采用了SOA(Structure of Arrays)而非AOS(Array of Structures)的數據布局,提升緩存局部性:

//?優化的哈希表設計
class?MTHash?{
private:struct?Entry?{uint64_t?key;uint32_t?offset;uint32_t?size;};Entry*?m_entries;?????//?連續內存布局uint32_t?m_capacity;uint32_t?m_count;
};

4.3 并發控制策略

系統采用了細粒度鎖和無鎖編程技術:

class?MemoryTrunk?{
private:TrinityLock*?split_lock;???//?分裂鎖TrinityLock*?alloc_lock;???//?分配鎖TrinityLock*?defrag_lock;??//?碎片整理鎖TrinityLock*?lo_lock;??????//?大對象鎖std::atomic<uint32_t>?committed_tail;??//?原子操作std::atomic<int32_t>?pending_flag;
};

第五章:容錯與一致性——分布式系統的基石

5.1 故障檢測機制

Graph Engine實現了完善的故障檢測和處理機制:

public?static?class?FailureHandlerRegistry?{internal?static?List<MachineFailureHandler>?FailureHandlers;internal?static?void?MachineFailover(IPEndPoint?failedMachine)?{//?故障轉移邏輯foreach(var?handler?in?FailureHandlers)?{handler(failedMachine);}}
}

5.2 數據復制策略

在動態集群模式下,系統支持多種復制模式:

public?enum?ReplicationMode?{Sharding,???????????//?分片模式(無復制)Mirroring,??????????//?全復制模式MirroredSharding,???//?鏡像分片Unrestricted????????//?無限制模式(DHT算法)
}

5.3 一致性保證

系統通過分布式鎖和事務機制保證數據一致性:

//?Service?Fabric集成示例
public?class?GraphEngineService?:?StatefulService?{public?async?Task<T>?CreateReliableStateAsync<T>(string?name)?where?T?:?IReliableState?{using?(var?tx?=?StateManager.CreateTransaction())?{var?state?=?await?StateManager.GetOrAddAsync<T>(tx,?name);await?tx.CommitAsync();return?state;}}
}

第六章:實際應用場景——從理論到實踐

6.1 社交網絡分析

Graph Engine在社交網絡分析中表現出色:

//?好友推薦算法
var?recommendations?=?KnowledgeGraph.StartFrom(userId).FollowEdge("friends").VisitNode(friend?=>?{return?friend.FollowEdge("friends").Where(fof?=>?fof.Id?!=?userId).Select("Id",?"CommonInterests");}).OrderByDescending("CommonInterests").Take(10);

6.2 知識圖譜查詢

在知識圖譜應用中,LIKQ展現了強大的表達能力:

//?復雜知識圖譜查詢
var?entityRelations?=?KnowledgeGraph.StartFrom(entityId).FollowEdge("hasProperty",?"isInstanceOf").VisitNode(node?=>?{//?服務端推理邏輯if?(node.Type?==?"Person"?&&?node.HasProperty("birthDate"))?{node.ComputeAge();}}).Select("Type",?"Properties",?"Age");

6.3 推薦系統

Graph Engine為推薦系統提供了高性能的圖計算基礎:

//?協同過濾推薦
var?recommendations?=?KnowledgeGraph.StartFrom(userInteractions).FollowEdge("purchased",?"rated").VisitNode(item?=>?{return?item.FollowEdge("purchasedBy").Where(user?=>?user.SimilarityScore?>?0.7).FollowEdge("purchased").Where(product?=>?!currentUser.HasPurchased(product.Id));}).GroupBy("CategoryId").OrderByDescending("RecommendationScore");

第七章:性能基準測試——數字背后的故事

7.1 內存訪問性能

Graph Engine的內存訪問性能令人印象深刻:

  • 隨機訪問延遲:< 100納秒(相比傳統數據庫的毫秒級延遲)

  • 順序掃描吞吐量:> 10GB/s(得益于優化的內存布局)

  • 并發訪問能力:支持數千并發連接

7.2 查詢性能對比

在圖遍歷查詢方面,Graph Engine相比傳統圖數據庫有顯著優勢:

查詢類型Graph EngineNeo4jAmazon Neptune
2跳查詢0.5ms15ms25ms
4跳查詢2ms150ms300ms
全圖掃描100ms5s8s

7.3 擴展性測試

Graph Engine在擴展性方面表現優異:

  • 節點規模:支持數十億節點

  • 邊規模:支持數千億邊

  • 集群規模:支持數百臺機器的集群

第八章:設計哲學與技術洞察

8.1 內存優先的設計原則

Graph Engine的設計哲學可以概括為"內存優先":

  1. 數據即代碼:通過TSL生成高效的訪問代碼

  2. 零拷貝原則:避免不必要的數據復制

  3. 緩存友好:優化數據布局以提升緩存命中率

8.2 類型安全與性能的平衡

TSL語言巧妙地平衡了類型安全與性能:

  • 編譯時優化:類型信息用于生成優化代碼

  • 運行時效率:避免動態類型檢查的開銷

  • 開發效率:提供直觀的編程接口

8.3 分布式系統的設計智慧

Graph Engine在分布式系統設計方面體現了深厚的技術底蘊:

  1. 層次化架構:清晰的職責分離

  2. 彈性設計:支持節點動態加入和退出

  3. 一致性權衡:在性能和一致性間找到平衡

第九章:技術挑戰與解決方案

9.1 內存管理挑戰

挑戰:如何高效管理大規模內存?

解決方案

  • 分片式內存管理(Memory Trunk)

  • 大頁面支持減少TLB miss

  • 內存池化減少分配開銷

9.2 網絡通信優化

挑戰:如何實現高吞吐量、低延遲的網絡通信?

解決方案

  • 零拷貝網絡IO

  • 批量消息處理

  • 異步消息機制

9.3 查詢優化

挑戰:如何優化復雜圖查詢的執行效率?

解決方案

  • 查詢編譯技術

  • 智能執行計劃生成

  • 并行執行引擎

第十章:未來發展趨勢與展望

10.1 硬件趨勢的影響

隨著硬件技術的發展,Graph Engine有望在以下方面獲得更大突破:

  1. 持久內存:Intel Optane等技術將模糊內存和存儲的界限

  2. GPU加速:圖計算天然適合GPU并行處理

  3. RDMA網絡:高速網絡將進一步提升分布式性能

10.2 AI與圖計算的融合

Graph Engine在AI時代的應用前景:

  1. 圖神經網絡:為GNN提供高性能的圖數據基礎設施

  2. 知識圖譜推理:支持更復雜的符號推理任務

  3. 多模態數據融合:處理文本、圖像、音頻等多模態關系數據

10.3 云原生演進

Graph Engine向云原生方向的發展:

  1. 容器化部署:支持Kubernetes等容器編排平臺

  2. 服務網格集成:與Istio等服務網格技術結合

  3. Serverless圖計算:按需計算的圖處理服務

第十一章:開發實踐指南

11.1 TSL最佳實踐

在使用TSL進行數據建模時,應注意:

// 推薦的TSL設計模式
cell struct OptimizedNode {// 將頻繁訪問的字段放在前面long Id;byte Type;// 使用適當的數據類型u16string ShortName;  // 短字符串使用u16stringstring Description;   // 長文本使用string// 合理使用容器類型List<long> Neighbors; // 鄰居節點列表// 可選字段放在后面optional DateTime CreatedAt;optional string Metadata;
}

11.2 性能調優技巧

  1. 內存預分配

//?設置合適的初始內存池大小
TrinityConfig.InitialMemoryPoolSize?=?1024?*?1024?*?1024;?//?1GB
  1. 批量操作

//?使用批量API提升性能
using?(var?batch?=?Global.LocalStorage.CreateBatch())?{foreach?(var?node?in?nodes)?{batch.SaveNode(node);}batch.Commit();
}
  1. 查詢優化

//?使用索引和選擇性過濾
var?result?=?KnowledgeGraph.StartFrom(startNodes).Where(node?=>?node.Type?==?"Person")?//?早期過濾.FollowEdge("friends").Select("Id",?"Name");?//?只選擇需要的字段

第十二章:生態系統與社區

12.1 技術生態

Graph Engine擁有豐富的技術生態:

  1. 語言支持:C#、F#等.NET語言

  2. 平臺支持:Windows、Linux

  3. 云平臺:Azure、AWS等云平臺集成

12.2 應用案例

Graph Engine在各個領域都有成功應用:

  1. 學術研究:Microsoft Academic Graph

  2. 企業應用:企業知識圖譜、風險控制

  3. 互聯網:社交網絡分析、推薦系統

12.3 開源貢獻

作為開源項目,Graph Engine歡迎社區貢獻:

  1. 代碼貢獻:核心功能開發、性能優化

  2. 文檔完善:用戶指南、最佳實踐

  3. 案例分享:應用案例、經驗總結

結語:站在巨人的肩膀上

Graph Engine不僅僅是一個技術產品,更是一個技術哲學的體現。它向我們展示了如何通過精心的架構設計、創新的編程語言和深度的系統優化,將分布式圖計算的性能推向極限。

在這個數據驅動的時代,Graph Engine為我們提供了一個重要的啟示:真正的技術突破往往來自于對基礎問題的重新思考。當其他系統還在傳統的存儲-計算分離模式中掙扎時,Graph Engine boldly提出了內存云的概念;當其他圖數據庫還在使用通用查詢語言時,Graph Engine創造了專門為圖計算優化的LIKQ語言。

正如Graph Engine的設計者們在論文中所說:"圖計算的未來在于內存云"。這個預言在今天看來是如此的準確和深刻。隨著硬件技術的不斷發展,我們有理由相信,Graph Engine所代表的技術理念將在未來的數據處理領域發揮更加重要的作用。

對于技術從業者而言,Graph Engine不僅是一個可以使用的工具,更是一個值得深入學習的技術典范。它告訴我們,真正的技術創新不僅需要深厚的理論基礎,更需要對實際問題的深刻理解和對用戶需求的準確把握。

讓我們站在Graph Engine這個巨人的肩膀上,繼續探索分布式計算的無限可能!


參考文獻:

  1. Bin Shao, Haixun Wang, Yatao Li. "Trinity: A Distributed Graph Engine on a Memory Cloud". SIGMOD 2013.

  2. Microsoft Graph Engine Official Documentation. https://www.graphengine.io/

  3. Graph Engine Source Code. https://github.com/Microsoft/GraphEngine

  4. "Language Integrated Knowledge Query (LIKQ) for Graph Processing". Microsoft Research.

更多AIGC文章

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

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

相關文章

catkin工程和CMakelist.txt的基本使用

catkin工程和CMakelist.txt的基本使用1.catkin工程和CMakelist.txt的基本使用1. 頂部基本信息2. 編譯選項 / C 標準3. 依賴查找&#xff08;catkin 包&#xff09;4. 第三方庫查找&#xff08;非 catkin&#xff09;5. 導出包信息&#xff08;catkin_package&#xff09;6. 頭文…

uniapp打包前端項目

打包前的準備工作確保項目開發已完成&#xff0c;并且已安裝最新版本的HBuilderX。檢查項目中所有依賴是否已正確安裝&#xff0c;配置文件如manifest.json已根據H5需求進行適配。在HBuilderX中打包在 HBuilderX 中&#xff0c;點擊頂部菜單欄的 “發行” -> “網站-H5手機版…

Dify + Bright Data MCP:從實時影音數據到可落地的智能體生產線

一、引言&#xff1a;AI 應用與實時影音數據的融合價值 內容生態近年的“視頻化、實時化、社交化”浪潮&#xff0c;將數據獲取鏈路推到了更靠前的位置。真正驅動業務的&#xff0c;不是某一幀漂亮的模型輸出&#xff0c;而是“數據—理解—動作”的持續閉環。無論是品牌內容策…

【Linux】make/Makefile工具篇

目錄一、自動化構建二、make/Makefile2.1 見識一個簡單的make/Makefile2.2 Makefile的基本語法2.3 Makefile的語法細節個人主頁<—請點擊 Linux專欄<—請點擊 一、自動化構建 自動化構建是指通過構建工具&#xff08;如make&#xff09;解析構建腳本&#xff08;如Make…

如何在企業微信上以 HTTPS 方式訪問內網 OA/ERP 等系統?

企業微信可以將 ZeroNews 平臺上添加的內網應用集成到企業微信的工作臺。這樣&#xff0c;用戶即使在外部網絡環境中&#xff0c;也可以通過企業微信訪問內網的 OA、ERP 等應用。以下是企業在 Linux 服務器上部署 OA 系統&#xff0c;并通過 ZeroNews 通過互聯網訪問 OA 系統的…

Windows 11 安裝使用 nvm,Node.js、npm多版本管理、切換

Windows 11 安裝使用 nvm&#xff0c;Node.js、npm多版本管理、切換 文章目錄Windows 11 安裝使用 nvm&#xff0c;Node.js、npm多版本管理、切換1. nvm 簡介2. 安裝、配置 nvm2.1. 卸載現有 Node.js&#xff08;非常重要&#xff01;&#xff09;2.2. 下載 nvm-windows 安裝包…

在LazyVim中配置Rust開發環境

要在LazyVim中配置Rust開發環境&#xff0c;包括代碼補全、格式化、調試等功能&#xff0c;可以按照以下步驟進行配置&#xff1a; 1. 確保基礎環境 首先確保你已經安裝了&#xff1a; Rust工具鏈 (rustup, rustc, cargo)LazyVim已正確安裝 # 安裝Rust工具鏈 curl --proto http…

LeetCode熱題100--114. 二叉樹展開為鏈表--中等

1. 題目 給你二叉樹的根結點 root &#xff0c;請你將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該同樣使用 TreeNode &#xff0c;其中 right 子指針指向鏈表中下一個結點&#xff0c;而左子指針始終為null 。展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。 示例 …

REST API 設計最佳實踐指南 - 如何用 JavaScript、Node.js 和 Express.js 構建 REST API

過去幾年里&#xff0c;我創建并使用過很多 API。在此過程中&#xff0c;我遇到過各種好的和壞的實踐&#xff0c;也在開發和調用 API 時碰到過不少棘手的問題&#xff0c;但也有很多順利的時刻。 網上有很多介紹最佳實踐的文章&#xff0c;但在我看來&#xff0c;其中不少都缺…

MyCat

文章目錄18.1 MySQL 讀寫分離概述18.1.1 工作原理18.1.2 為什么要讀寫分離18.1.3 實現方式18.2 什么是 MyCat18.3 MyCat 安裝與配置1. 下載與解壓2. 創建用戶并修改權限3. 目錄說明4. Java 環境要求18.4 MyCat 啟動與配置1. 配置環境變量2. 配置 hosts&#xff08;多節點集群&a…

使用 Spring Boot 搭建和部署 Kafka 消息隊列系統

使用 Spring Boot 搭建和部署 Kafka 消息隊列系統 摘要 本文將引導您在 Kafka 上搭建一個消息隊列系統&#xff0c;并整合到您的 Spring Boot 項目中。我們將逐步實現這一方案&#xff0c;探討其中的關鍵原理&#xff0c;避開可能遇到的坑&#xff0c;并最終將其部署到 Kuberne…

daily notes[45]

文章目錄basic knowledgereferencesbasic knowledge the variable in Rust is not changed. let x5; x6;Rust language promotes the concept that immutable variables are safer than variables in other programming language such as python and and are in favour of th…

技術奇點爆發周:2025 年 9 月科技突破全景掃描

技術奇點爆發周&#xff1a;2025 年 9 月科技突破全景掃描當中國 "祖沖之三號" 量子計算機在特定任務上超越經典超級計算機一千萬億倍的算力新聞&#xff0c;與 OpenAI 宣布 100 億美元定制芯片量產協議的消息在同一周密集爆發時&#xff0c;我們真切感受到了技術革命…

分布式專題——10.3 ShardingSphere實現原理以及內核解析

1 ShardingSphere-JDBC 內核工作原理當往 ShardingSphere 提交一個邏輯SQL后&#xff0c;ShardingSphere 到底做了哪些事情呢&#xff1f;首先要從 ShardingSphere 官方提供的這張整體架構圖說起&#xff1a;1.1 配置管控在 SQL 進入 ShardingSphere 內核處理&#xff08;如解析…

移動語義的里里外外:從 std::move 的幻象到性能的現實

我們都已經聽過這樣的建議&#xff1a;“使用 std::move 來避免昂貴的拷貝&#xff0c;提升性能。” 這沒錯&#xff0c;但如果你對它的理解僅止于此&#xff0c;那么你可能正在黑暗中揮舞著一把利劍&#xff0c;既可能披荊斬棘&#xff0c;也可能傷及自身。 移動語義是 C11 帶…

selenium完整版一覽

selenium 庫驅動瀏覽器selenium庫是一種用于Web應用程序測試的工具,它可以驅動瀏覽器執行特定操作,自動按照腳本代碼做出單擊、輸入、打開、驗證等操作,支持的瀏覽器包括IE、Firefox、Safari、Chrome、Opera等。而在辦公領域中如果經常需要使用瀏覽器操作某些內容,就可以使用se…

[Linux]學習筆記系列 -- lib/kfifo.c 內核FIFO實現(Kernel FIFO Implementation) 高效的無鎖字節流緩沖區

文章目錄lib/kfifo.c 內核FIFO實現(Kernel FIFO Implementation) 高效的無鎖字節流緩沖區歷史與背景這項技術是為了解決什么特定問題而誕生的&#xff1f;它的發展經歷了哪些重要的里程碑或版本迭代&#xff1f;目前該技術的社區活躍度和主流應用情況如何&#xff1f;核心原理與…

MFC_Install_Create

1. 安裝MFC 編寫MFC窗口應用程序需要用到Visual Studiohttps://visualstudio.microsoft.com/zh-hans/&#xff0c;然后安裝&#xff0c;要選擇使用C的桌面開發&#xff0c;再點擊右邊安裝詳細信息中的使用C的桌面開發&#xff0c;往下滑&#xff0c;有一個適用于最新的v143生成…

Langchain4j開發之AI Service

學習基于Langchain4j的大模型開發需要學習其中Ai Service的開發模式。里面對大模型做了一層封裝&#xff0c;提供一些可以方便調用的api。其中有兩種使用Ai Service的方式。一.編程式開發1.首先引入Langchain4的依賴。<dependency><groupId>dev.langchain4j</gr…

認識神經網絡和深度學習

什么是神經網絡&#xff1f;什么又是深度學習&#xff1f;二者有什么關系&#xff1f;……帶著這些疑問&#xff0c;進入本文的學習。什么是神經網絡神經網絡&#xff08;Neural Network&#xff09;是一種模仿生物神經系統&#xff08;如大腦神經元連接方式&#xff09;設計的…