首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LLVM是否提供了实现“绿色线程”/lightweight进程的工具?

LLVM是否提供了实现“绿色线程”/lightweight进程的工具?
EN

Stack Overflow用户
提问于 2015-01-03 12:24:27
回答 2查看 893关注 0票数 8

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

EN

回答 2

Stack Overflow用户

发布于 2016-05-31 14:03:30

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-01-03 13:47:50

我没有使用LLVM或Erlang的具体经验。

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

更多详细信息,请访问:https://stackoverflow.com/a/999610/120163

我对LLVM所知甚少,这说明这可能很难。您需要生成的是上下文切换代码。我不确定LLVM是否直接支持这一点。在生成纯C代码时,这肯定不是一件容易的事情,因为语言原语不能让您很好地了解机器/线程状态。

另一方面,在试图支持C++14特性的过程中,肯定会遇到"C++原生“线程。必须有上下文切换支持才能实现,所以可能有人已经或已经解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27751722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档