我正在研究使用 LLVM 作为本机代码生成器来设计一种支持轻量级进程(“绿色线程”)的并发语言。轻量级进程以 M:N 方式分配给本地操作系统线程,并且线程之间的工作窃取应该是可能的(即进程应该由可以在必要时在线程之间传递的数据结构表示)。可能同时存在大量进程,因此进程不应占用太多内存,并且它们之间的上下文切换应尽可能快。此外,在上下文切换期间或发生垃圾收集时“暂停”轻量级进程应该相当简单。我知道 Erlang 有一个 LLVM 后端,但我几乎找不到关于它的实现的文献;
问问题
913 次
2 回答
1
LLVM 与实现这种类型的系统没有直接关系。有很多语言的前端具有低于 LLVM 的 IR 的结构。
LLVM 只是为单线程执行生成本机代码的编译器技术。实现上下文切换、适当地设置堆栈(仙人掌堆栈或其他技术)以及其他问题主要是运行时和环境的责任。
一个例外是支持在必要时合成运行时调用以增加堆栈,并且可能将堆栈拆分为非连续区域。正如评论中所指出的,LLVM 对此有一些支持,尽管它的测试不太好。但是,您的前端也可以控制堆栈的使用,以避免需要 LLVM 中的任何支持。
于 2016-05-31T06:03:30.003 回答
0
我对 LLVM 或 Erlang 没有特别的经验。
但是我已经用一种叫做 PARLANSE 的编程语言实现了这样一个系统。是的,让上下文切换变得便宜是困难的。
此 SO 答案的更多详细信息:https ://stackoverflow.com/a/999610/120163
我对 LLVM 的了解很少表明这可能很困难。您需要生成的是上下文切换代码。我不确定 LLVM 是否直接支持。在生成纯 C 代码时,这当然不是一件容易的事,因为语言原语不会让您很好地了解机器/线程状态。
他的另一面是 Clang,在尝试支持 C++14 功能时,肯定会遇到“C++ 原生”线程。必须有上下文切换支持才能实现这一点,所以也许有人已经或已经解决了这个问题。
于 2015-01-03T05:47:50.253 回答