如何向虚拟机添加并发支持

问题描述 投票:0回答:1

我实现了自己的函数式(非 OO)编程语言和一个阅读 Crafting Interpreters 的 VM,我想知道如何实现并发。

我搜索了这方面的资源,但我仍然不知道如何实现并发虚拟机。

我对类 Erlang Actor Model 最感兴趣,希望将其集成到该语言中。

concurrency virtual-machine programming-languages
1个回答
-1
投票

用自己的编程语言实现并发,特别是基于 Erlang 中的 Actor 模型,是一个雄心勃勃且具有挑战性的项目。下面,我将概述一些有关如何开始此操作的一般步骤。请记住,根据您现有的语言和 VM 设计,具体细节可能会有很大差异。

概念化你的 Actor 模型:Erlang 中的 Actor 模型通过拥有大量通过发送消息进行通信的独立 Actor 来工作。每个参与者可以做三件事:向其他参与者发送有限数量的消息,创建有限数量的新参与者,并指定用于其接收的下一条消息的行为。首先,您需要确定您希望这些参与者如何在您的语言中发挥作用。

定义 Actor 基元:您需要用您的语言定义新的基元(或新的基本操作)来创建和管理 Actor。例如,您可以添加新操作来创建参与者、向参与者发送消息以及更改参与者的行为。

实现消息传递:参与者模型的基本方面之一是参与者之间的消息传递。您需要定义如何用您的语言表示和传递消息。此外,您需要为每个参与者实现一个邮箱或类似的机制来存储传入的消息。

创建 Actor 调度:这可能是最具挑战性的方面之一。您需要一种机制来控制哪个参与者当前处于“活动”状态并处理其消息,以及何时应将控制权传递给另一个参与者。这本质上就是并发系统中调度程序的作用。

确保隔离和同步:Actor 模型的关键特征之一是 Actor 彼此隔离并且不共享状态。您需要确保您的虚拟机强制实施这种隔离。您可能还需要考虑同步机制来防止竞争条件或死锁 - 尽管参与者模型自然可以通过其设计避免许多此类问题。

添加错误处理:在并发系统中,错误处理可能会变得更加复杂。您需要考虑一个参与者的错误如何影响其他参与者和整个系统。

测试和优化:一旦有了基本的实现,您就需要使用各种并发程序对其进行彻底的测试。您可能还需要优化调度程序和实施的其他方面,以获得更好的性能或更有效的资源使用。

有关如何在自定义虚拟机中实现这些概念的资源,您可能会发现 Peter Van Roy 和 Seif Haridi 所著的《计算机编程的概念、技术和模型》一书很有帮助。本书详细讨论了参与者模型和其他并发模型。

如果您无法找到专门用于在 VM 中实现并发性的资源,您可能需要将用于实现一般并发性的资源与用于 VM 实现的资源结合起来。实现并发的许多方面并不特定于虚拟机,因此有关并发编程和操作系统的资源也可能非常有帮助。

请记住,实现并发不是一项小任务,可能需要大量时间和调试才能正确,因此如果有时进展缓慢,请不要灰心!

© www.soinside.com 2019 - 2024. All rights reserved.