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