Threadprocs – ejecutables que comparten un espacio de direcciones (punteros sin copia)
Este proyecto lanza múltiples programas independientes en un único espacio de direcciones virtual compartido, manteniendo el comportamiento de procesos separados (binarios, variables globales y ciclos de vida independientes). Cuando los threadprocs comparten su espacio de direcciones, los punteros son válidos entre ellos sin cambios de código para binarios Linux bien comportados. A diferencia de los hilos, cada threadproc es un proceso independiente y semi-aislado. A diferencia de los sistemas de plugins basados en dlopen, los threadprocs ejecutan programas tradicionales con una función `main()`. A diferencia de los procesos POSIX, los punteros siguen siendo válidos entre threadprocs porque comparten el mismo espacio de direcciones. Esto significa que estructuras de datos idiomáticas basadas en punteros como `std::string` o `std::unordered_map` pueden pasarse entre threadprocs y accederse directamente (con las consideraciones habituales de condiciones de carrera). Esto logra un modelo de programación entre pthreads y IPC de memoria compartida multiproceso. La implementación depende de dirigir ASLR y el diseño de direcciones virtuales en tiempo de carga, implementar un análogo en espacio de usuario de `exec()`, y manipular cuidadosamente descriptores de archivo, señales, etc. de threadprocs. Está implementado completamente en código de espacio de usuario sin privilegios: < https://github.com/jer-irl/threadprocs/blob/main/docs/02-imp... >. Hay una demo simple que muestra desreferenciación de memoria "entre threadprocs" en < https://github.com/jer-irl/threadprocs/tree/main?tab=readme-... >, incluyendo un diagrama de alto nivel. Esto es relevante para sistemas de múltiples procesos con memoria compartida (a menudo buffers circulares o tablas planas). Estos diseños frecuentemente requieren serialización o copia, y tienden a alejarse de estructuras de datos idiomáticas de C++ o Rust. Las estructuras basadas en punteros no pueden pasarse directamente. Hay limitaciones significativas y casos extremos, y no está claro que sea un modelo práctico, pero el proyecto explora una forma de relajar los límites tradicionales de memoria de procesos mientras se estructura un sistema como componentes lanzados independientemente.
- Automatización de Flujos de Trabajo
- Código Abierto
- Generación de Código
✨ Resumen de IA
Threadprocs permite que múltiples ejecutables independientes se ejecuten dentro de un único espacio de direcciones virtual compartido, permitiendo acceso directo a punteros entre ellos mientras mantiene un aislamiento similar al de procesos. Este enfoque ofrece un punto intermedio entre hilos y la memoria compartida tradicional multiproceso.
Ideal para
Programadores de sistemas que exploran nuevos métodos de comunicación entre procesos, Desarrolladores que trabajan con estructuras de datos grandes e interconectadas entre componentes, Investigadores que estudian técnicas de aislamiento y compartición de memoria
Por qué importa
Permite compartir directamente, sin copia, estructuras de datos basadas en punteros entre ejecutables lanzados de forma independiente, permitiéndoles compartir un único espacio de direcciones.
Funciones clave
- Inicia programas independientes en un único espacio de direcciones virtuales compartido.
- Mantiene comportamiento similar a procesos separados (binarios, variables globales, tiempos de vida).
- Permite compartir punteros sin copia entre 'threadprocs' en Linux.
- Soporta acceso directo a estructuras de datos idiomáticas de C++/Rust (por ejemplo, std::string).
Casos de uso
- Un desarrollador de videojuegos podría usar threadprocs para cargar diferentes módulos del juego (por ejemplo, IA, física, renderizado) como ejecutables independientes que comparten el mismo espacio de memoria. Esto permitiría pasar directamente, sin copia, estructuras de datos complejas como grafos de escena o estados de personajes entre módulos, simplificando la comunicación intermodular en comparación con IPC tradicional o serialización.
- Un programador de sistemas que construye una canalización de procesamiento de datos de alto rendimiento podría emplear threadprocs para ejecutar etapas de procesamiento distintas (por ejemplo, ingesta, transformación, análisis) como binarios separados. Esta arquitectura permitiría la manipulación directa de búferes de datos compartidos, como arreglos grandes o grafos de objetos complejos, sin la sobrecarga de copia o serialización, mejorando potencialmente el rendimiento.
- Un investigador que desarrolla un entorno de simulación complejo podría aprovechar threadprocs para gestionar diferentes componentes de simulación (por ejemplo, comportamiento de agentes, interacciones ambientales, registro de datos) como programas compilados independientemente. Esto permitiría compartir sin problemas el estado de simulación y el acceso directo a estructuras de datos compartidas, facilitando la creación rápida de prototipos y la iteración en la lógica de simulación.