繁体   English   中英

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

[英]Does LLVM provide any facilities for implementing “green threads”/lightweight processes?

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

我没有LLVM或Erlang的特定经验。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM