LLVM是否提供了实现"绿色线程" /轻量级进程的任何工具?

时间:2015-01-03 04:24:27

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

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

2 个答案:

答案 0 :(得分:0)

我对LLVM或Erlang没有具体经验。

但是我已经在一个名为PARLANSE的编程语言中实现了这样一个系统。 是的,让上下文切换变得便宜是很困难的。

此SO答案的更多详情:https://stackoverflow.com/a/999610/120163

我对LLVM的了解很少,这表明它可能很难。什么 你需要生成上下文切换代码。我不确定LLVM是否支持 直接。在生成时,它肯定不容易做到 纯C代码,因为语言原语不允许你进入机器/线程 状态很好。

他在这里翻转的是Clang,在尝试支持C ++ 14功能时,肯定是 偶然发现“C ++原生”线程。必须有上下文切换支持才能实现这一点,所以也许有人已经或已经解决了这个问题。

答案 1 :(得分:0)

LLVM与实现此类系统并不直接相关。对于具有这样的结构的语言,有很多前端可以降低到LLVM的IR。

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

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