Threadprocs – 共享單一地址空間的可執行檔(零複製指標)
本專案將多個獨立程式啟動至單一共享虛擬地址空間中,同時仍保持獨立行程的行為(獨立的二進位檔、全域變數與生命週期)。當threadprocs共享地址空間時,指標在它們之間保持有效,無需對行為良好的Linux二進位檔進行程式碼修改。與執行緒不同,每個threadproc都是獨立且半隔離的行程。與基於dlopen的外掛系統不同,threadprocs執行帶有`main()`函式的傳統可執行檔。與POSIX行程不同,指標在threadprocs之間保持有效,因為它們共享相同的地址空間。這意味著慣用的基於指標的資料結構(如`std::string`或`std::unordered_map`)可以在threadprocs之間傳遞並直接存取(需考慮常見的資料競爭問題)。這實現了一種介於pthreads與多行程共享記憶體IPC之間的程式設計模型。實作依賴於在載入時引導ASLR與虛擬地址佈局,並實作使用者空間的`exec()`類比功能,以及對threadproc檔案描述符、信號等的謹慎操作。它完全以非特權使用者空間程式碼實作:< https://github.com/jer-irl/threadprocs/blob/main/docs/02-imp... >。有一個簡單的示範展示「跨threadproc」記憶體解參考:< https://github.com/jer-irl/threadprocs/tree/main?tab=readme-... >,包含高階架構圖。這與使用共享記憶體(通常是環形緩衝區或平面表)的多行程系統相關。這類設計通常需要序列化或複製,且往往偏離慣用的C++或Rust資料結構。基於指標的資料結構無法直接傳遞。存在顯著的限制與邊緣案例,尚不清楚這是否為實用模型,但本專案探索了一種在保持系統以獨立啟動元件構建的同時,放寬傳統行程記憶體界限的方法。
- 工作流程自動化
- 整合功能
- 程式碼生成
✨ AI 摘要
Threadprocs 允許多個獨立可執行檔在單一共享虛擬地址空間中運行,實現跨程式的直接指標存取,同時保持類似進程的隔離。這種方法提供了介於執行緒與傳統多進程共享記憶體之間的中間方案。
適合誰
系統程式設計師探索新穎的進程間通訊方法, 開發者處理跨元件的大型互連資料結構, 研究人員調查記憶體隔離與共享技術
為何值得關注
透過允許獨立啟動的可執行檔共享單一地址空間,實現基於指標的資料結構在它們之間直接、零複製的共享。
核心功能
- 將獨立程式啟動至單一共享虛擬位址空間中。
- 維持類似行程的分離行為(二進位檔、全域變數、生命週期)。
- 在Linux上實現跨'threadprocs'的零複製指標共享。
- 支援直接存取慣用的C++/Rust資料結構(例如std::string)。
使用場景
- 遊戲開發者可以使用 threadprocs 來載入不同的遊戲模組(例如 AI、物理、渲染)作為獨立可執行檔,共享相同的記憶體空間。這允許模組之間直接、零複製地傳遞複雜資料結構,如場景圖或角色狀態,相比傳統 IPC 或序列化,簡化了模組間通訊。
- 系統程式設計師在構建高效能資料處理管道時,可能採用 threadprocs 來運行不同的處理階段(例如資料攝取、轉換、分析)作為獨立二進位檔。這種架構能夠直接操作共享資料緩衝區,如大型陣列或複雜物件圖,無需複製或序列化的額外負擔,可能提升吞吐量。
- 研究人員開發複雜模擬環境時,可以利用 threadprocs 來管理不同的模擬元件(例如代理行為、環境互動、資料記錄)作為獨立編譯的程式。這允許無縫共享模擬狀態並直接存取共享資料結構,促進模擬邏輯的快速原型設計與迭代。