Show HN: Threadprocs – 可执行文件共享同一地址空间(零拷贝指针)

发布: (2026年3月24日 GMT+8 00:08)
3 分钟阅读
原文: Hacker News

Source: Hacker News

Overview

Threadprocs 将多个独立的程序加载到同一个共享的虚拟地址空间中,同时保持各自进程的语义——每个程序都有自己的二进制文件、全局变量和生命周期。由于它们共享同一地址空间,指针在不同 threadproc 之间仍然有效,而无需对行为良好的 Linux 二进制文件进行任何代码修改。

  • 不同于线程: 每个 threadproc 是一个独立的、半隔离的进程。
  • 不同于基于 dlopen 的插件: threadproc 运行的是带有 main() 函数的传统可执行文件。
  • 不同于 POSIX 进程: 由于地址空间共享,指针在 threadproc 之间保持有效。

这使得可以直接在 threadproc 之间传递基于指针的数据结构,如 std::stringstd::unordered_map(仍需考虑常规的数据竞争问题)。该模型介于 pthreads 与多进程共享内存 IPC 之间。

Implementation Details

实现思路依赖于:

  • 在加载时控制 ASLR 和虚拟地址布局。
  • 实现用户空间的 exec() 类似功能。
  • 小心地操作 threadproc 的文件描述符、信号以及其他资源。

所有这些都完全在非特权用户空间代码中完成。完整源码请参见实现仓库:

Threadprocs implementation (GitHub)

Demo

一个简单的演示展示了“跨 threadproc”内存解引用:

Threadprocs demo (GitHub)

演示中包含了一个高级别的示意图,说明了指针如何安全共享。

Use Cases

Threadprocs 与需要多个进程共享内存的系统相关(例如环形缓冲区或平面表)。传统设计往往需要序列化或拷贝,这会让开发者远离 C++ 或 Rust 的惯用数据结构。使用 threadproc,基于指针的结构可以直接传递,从而简化架构。

Limitations

  • 存在显著的限制和边缘情况(例如 TLS 的处理、信号语义以及某些加载器行为)。
  • 目前尚不清楚该模型是否适用于生产工作负载。
  • 该项目属于探索性工作,旨在放宽传统进程内存边界,同时仍然允许组件独立启动。

Comments URL:
Points: 37
Comments: 27

0 浏览
Back to Blog

相关文章

阅读更多 »

编程并发

封面图片:Programing Concurrency https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads...

OpenSUSE Kalpa

Kalpa 是一个原子化和事务性的 Linux 操作系统,提供 Plasma 桌面环境。!Matrix badge https://img.shields.io/matrix/kalpa%3Aopensus...