返回首页

24小时热榜

19作者: jer-irl大约 6 小时前原帖
该项目将多个独立程序启动到一个共享的虚拟地址空间中,同时仍然表现得像是独立的进程(独立的二进制文件、全局变量和生命周期)。当线程进程共享其地址空间时,指针在它们之间是有效的,而无需对良好行为的Linux二进制文件进行代码更改。 与线程不同,每个线程进程都是一个独立且半隔离的进程。与基于dlopen的插件系统不同,线程进程运行传统的可执行文件,并包含`main()`函数。与POSIX进程不同,由于它们共享相同的地址空间,指针在线程进程之间仍然有效。 这意味着像`std::string`或`std::unordered_map`这样的惯用指针数据结构可以在线程进程之间传递并直接访问(需考虑常规的数据竞争问题)。 这实现了一种介于pthreads和多进程共享内存IPC之间的编程模型。该实现依赖于在加载时引导ASLR和虚拟地址布局,并实现用户空间的`exec()`类比,以及对线程进程文件描述符、信号等的仔细操作。它完全在非特权的用户空间代码中实现:&lt;<a href="https:&#x2F;&#x2F;github.com&#x2F;jer-irl&#x2F;threadprocs&#x2F;blob&#x2F;main&#x2F;docs&#x2F;02-implementation.md" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jer-irl&#x2F;threadprocs&#x2F;blob&#x2F;main&#x2F;docs&#x2F;02-imp...</a>&gt;。 有一个简单的演示展示了“跨线程进程”内存解引用,地址为&lt;<a href="https:&#x2F;&#x2F;github.com&#x2F;jer-irl&#x2F;threadprocs&#x2F;tree&#x2F;main?tab=readme-ov-file#demo" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jer-irl&#x2F;threadprocs&#x2F;tree&#x2F;main?tab=readme-...</a>&gt;,包括一个高层次的图示。 这与具有共享内存的多进程系统相关(通常是环形缓冲区或扁平表)。这些设计通常需要序列化或复制,并且往往不符合惯用的C++或Rust数据结构。基于指针的数据结构不能直接传递。 存在显著的限制和边缘情况,目前尚不清楚这是否是一个实用的模型,但该项目探索了一种放宽传统进程内存边界的方法,同时仍然将系统构建为独立启动的组件。