【问题标题】:Is there a way to maintain multiple stacks/instruction pointers in LLVM?有没有办法在 LLVM 中维护多个堆栈/指令指针?
【发布时间】:2016-01-14 09:28:51
【问题描述】:

我一直在为 LLVM 编写一种玩具语言。我想要实现的最雄心勃勃的功能是纤维。我已经阅读了很多关于此事的内容,并且我认为我对它们的传统实现方式有一个模糊的概念。据我所知,纤维通常被建模为指令指针和堆栈。 (参见:Golang 运行时)

是否有任何 LLVM 支持异步执行,具有不同的指令指针?多个堆栈?

我知道 LLVM 是一个寄存器机器,有什么办法可以确保所有相关数据都保存在堆栈上?和/或保存和恢复当前寄存器状态的方法?

手动实现这将是一个真正的害虫,所以任何帮助表示感谢!

【问题讨论】:

  • 关于保存/恢复寄存器状态的问题是一个有趣的问题。不过,它可能值得提出自己的问题。

标签: asynchronous llvm coroutine fiber


【解决方案1】:

对于一种玩具语言,一个快速的解决方案是使用线程模拟纤维的行为。制作一堆线程,但要确保只有其中一个在做任何事情。您可以通过告诉其他线程对连接到主线程的套接字进行阻塞调用来让它们冷静下来。

显然,线程比纤维更昂贵。所以这在性能方面并不理想。

如果您想要性能,不幸的是,据我所知,唯一的方法是显式地管理前端堆栈,全部由您自己完成。例如,一种方法是

“延续”对象然后履行指令指针的角色(尽管以非常不同的方式!),您手动分配的内存履行堆栈数据的角色。更多详情请见here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2013-01-20
    • 2015-11-16
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多