不同的并发范式如何比较?

问题描述

有不同的并发范式:

在我未经训练的眼睛看来,这些都做同样的事情。如果它们都可用,我什么时候应该使用一个而不是另一个?它们兼容吗?它们可以一起使用吗?

解决方法

异步编程有着悠久的历史。大部分历史都充满了回调或事件,很难编程。

Promises/Futures 带来的最大好处是异步操作现在由单个对象表示,该对象具有自己的回调/通知列表。这修复了旧的基于回调/基​​于事件的异步编程风格的大多数问题,但在编写循环(例如,指数重试)等代码时仍然很尴尬。

async/await 通过添加更方便的语法建立在 Promises/Futures 之上;有了 async/await,异步方法终于几乎和同步方法一样简单了。大多数 async 实现都建立在 Promise 之上(例如,JavaScript 中的 Promise、C# 中的 Task<T>、Python 中的 asyncio.Future、Rust 中的 Future trait)。

演员是完全不同的东西。 Actors 更多的是关于分布式编程,Actor 可以在任何机器上运行并有自己的错误恢复等。 最初的 OOP 思想非常类似于 Actor(将“消息”发送到可能是远程的“实例”),但是这些天 OOP 已经形成一个概念,它们被限制在同一个本地进程中。 Actor 在某些方面代表了原始 OOP 思想的复活。

就使用指南而言,我推荐 async/await 而不是 Futures/Promises,因为它是同一想法(异步编码模式)的进一步演变。 Actor 是一种解决不同问题的不同技术,所以我会说只有在需要时才使用它们。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...