programming-languages - LLVM 是否提供任何实现 "green threads"/轻量级进程的工具?

标签 programming-languages llvm green-threads lightweight-processes

我正在考虑使用 LLVM 作为 native 代码生成器,以 Erlang 的脉络设计一种支持轻量级进程(“绿色线程”)的并发语言。轻量级进程以 M:N 方式分配给本地 OS 线程,并且线程之间的工作窃取应该是可能的(即进程应该由可以在线程之间传递的数据结构表示,如果需要)。可能同时存在大量进程,因此进程不应占用太多内存,并且它们之间的上下文切换应尽可能快。此外,在上下文切换期间或发生垃圾收集时“暂停”轻量级进程应该相当简单。我知道 Erlang 有一个 LLVM 后端,但我找不到关于它的实现的文献很少;有人可以向我描述这怎么可能吗?

最佳答案

LLVM 与实现这种类型的系统没有直接关系。有很多语言的前端具有这种结构,低于 LLVM 的 IR。

LLVM 只是一种编译器技术,用于为单个执行线程生成 native 代码。实现上下文切换、适本地设置堆栈(仙人掌堆栈或其他技术)以及其他问题主要是运行时和环境的责任。

一个异常(exception)是支持运行时调用的合成以在必要时增加堆栈,并且可能将堆栈拆分为不连续的区域。正如评论中所指出的,LLVM 对此有一些支持,尽管它没有经过很好的测试。但是,您的前端也可以控制堆栈的使用,以避免在 LLVM 中需要任何支持。

关于programming-languages - LLVM 是否提供任何实现 "green threads"/轻量级进程的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27751722/

相关文章:

programming-languages - 语言采用是否受其可用 IDE 的生产力驱动?

.net - .NET Framework 是用什么语言编写的?

optimization - 防止 clang 用库调用替换我的代码

c# - 编写一个针对 LLVM 的 C# 编译器是否有意义?

ios - LLVM 编译器 - 如何禁用特定函数的优化?

go - goroutine 在什么时候可以 yield?

programming-languages - "Hello World"在以 Q、U 和 Y 开头的语言中

python - 在单个 python 进程中混合绿色线程和 native 线程是否安全?

java - 组合两个 Runnable 对象

linux - 为 Linux 生成 GUI 的编程语言或环境?