我是一名学生,目前正在撰写有关 Raku 的论文,为此我决定评估 Raku (Perl 6) 在处理高并发时是否是一种好语言。
除了官网,我还没有找到任何关于 Raku 并发的论文。另外,我不知道如何评估 Raku 的并发性(例如,我应该使用什么程序,应该将哪种语言与 Raku 进行比较等等)。
Raku 提供了哪些并发机制?这些记录在哪里?如何评估它们的功能和性能?
Jon*_*ton 14
Raku 提供了许多不同的并发机制(此外还提供了许多并行编程方法,但我假设问题实际上只是关于并发)。Raku 中的大部分内容都可以在其他语言中找到。例如:
gather/take机制懒惰地产生的值。这在各种语言中被视为生成器函数;然而,在 Raku 中,没有单个堆栈帧限制,因此它们是强大的协程。(这不是涉及异步编程的任何上下文,但它仍然符合并发的定义)。Promise传递异步操作的单个结果的机制很像PromiseJavaScript 中的 s 或Task.Net 中的(语义更接近后者)。Supply是异步值流。它与反应式扩展 (Rx)有很多共同点,但是选择了适合整个 Raku 语言设计的命名和 API(例如,方法名称匹配它们在序列上的同步对偶)。Channel是一个并发队列,它有一个机制来传达完成和错误,这意味着你可以很容易地在范式Supply和Channel范式之间进行转换。关键区别在于 aChannel具有存储 - 您可以将值放入其中,然后立即继续执行其他操作 - 而如果您将值发送到 a 中,则Supply您需要支付处理成本(提供背压机制)。可以使用Channels构建各种架构,例如分阶段的事件驱动架构。在乐,最有特色的概念,它不会在其他的语言直接存在,是react/ supply/whenever构造。编写多个异步流的处理器通常具有挑战性(订阅管理、并发控制);该构造提供了一种结构化的编程方法。除此之外,主要是语言集成在 Raku 中更强一些的问题,而不是将这些东西仅仅视为库。
正如其他人所指出的那样,正式论文的方式并不多。但是,这些幻灯片可能很有趣(免责声明:它们是我的;我为 Raku 并发设计做出了贡献,并发明了react/ supply/ whenever)。
关于 Raku 并发的论文:如果你想描述并发是如何工作的,我所知道的没有学术论文。您可以在一些 Advent Calendar 出版物中查找,例如关于 HTTP 服务器中的并发性。大多数关于 Raku 的书籍,比如我自己的 Raku Recipes(由 Apress 出版),都包含一个关于并发的章节,所以你也可以查看一下。最后,我与人合着的这篇论文使用 Raku 的并发进行进化计算,取得了不错的效果。
如何评估 Raku 的并发性: * Raku 使用通信顺序进程,它使用Channels作为第一类对象。从这个意义上说,它类似于Go。另一方面,它能够以与 Julia 通过宏相同的方式通过hyper/race自动线程化数据流。所以这可能是两个比较的目标。
也许perl6-users 邮件列表是提出此类问题的更好场所。
内置于 raku 的 CSP 是由 Tony (Anthony) Hoare 构思的完善的并发模型。您可能还想寻找 Bill (William) Roscoe 继续 Tony 研究路线的工作。请注意,这将是一般的 CSP 研究。我怀疑是否有任何可参考的内容专门针对 Raku 完成。
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |