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