《七周七并发模型》第五章Actor引言

简介:

使用actor就像租车——我们如果需要,可以快速便捷地租到一辆;如果车辆发生故障,也不需要自己修理,直接打电话给租车公司更换另外一辆即可。

actor模型是一种适用性非常好的通用并发编程模型。它可以应用于共享内存架构和分布式内存架构,适合解决地理分布型的问题。同时它还能提供很好的容错性。

5.1 更加面向对象

函数式编程不使用可变状态,也就避免了共享可变状态带来的问题。相比之下,使用actor 模型保留了可变状态,只是不进行共享。actor类似于面向对象(OO)编程中的对象——其封装了状态,并通过消息与其他actor通信。

两者的区别是一个actor与其他actor是同时运行的,并且与OO式的“消息传递”(实质上只是调用一个方法)不同,actor之间的消息传递是真实地在传递消息。

actor模型是一个通用的并发编程模型,几乎可以用在任何一种编程语言里, 典型的是 Erlang①。而我们将用Elixir②来介绍actor模型,它是运行在Erlang虚拟机(BEAM)上的相对较新的一门编程语言。
与Clojure类似,Elixir是一门不纯粹的、动态类型的函数式语言。如果你熟悉Java或者Ruby,很容易就能看懂Elixir代码。与以往一样,我们不会把本章写成Elixir的教程(本书的主旨是并发,而不是编程语言),但仍将介绍一些必要的语言特性。如果你对这门语言并不熟悉,那就不得不在某些地方“盲目”接受本书的说法——如果想深入学习Elixir,推荐阅读Programming Elixir[Tho14]。

第一天,我们将学习actor模型的基础——如何创建actor、发送消息和接收消息。第二天,学习使用actor模型的程序具有容错性的关键:失败检测和“任其崩溃”的哲学。第三天,学习如何通过actor模型编写分布式程序,将计算扩展到多台计算机,并能从一台或多台计算机的崩溃中恢复过来。

相关文章
|
9月前
|
API 调度 Android开发
打造高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】在移动开发领域,性能优化和响应速度是衡量应用质量的关键因素。随着Kotlin语言的普及,协程作为其核心特性之一,为Android开发者提供了一种全新的并发处理方式。本文深入探讨了Kotlin协程在Android应用开发中的优势,并通过实例演示如何在实际项目中有效利用协程提升应用性能和用户体验。
|
9月前
|
物联网 区块链 vr&ar
构建高效Android应用:Kotlin协程的实践指南未来交织:新兴技术趋势与跨领域应用探索
【5月更文挑战第28天】随着移动应用开发的不断进步,开发者寻求更高效、更简洁的方式来处理异步任务和提升用户体验。在Android平台上,Kotlin协程作为一种轻量级的线程管理方案,提供了强大的工具来简化并发和异步编程。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在Android应用中利用协程优化性能和响应性。通过本文,你将学会如何运用协程来编写更加流畅和高效的代码,同时减少内存消耗和提高应用的稳定性。 【5月更文挑战第28天】 随着科技的迅猛发展,一系列创新技术如区块链、物联网(IoT)、虚拟现实(VR)等正在逐渐从概念验证走向实际应用。这些技术的融合与交叉不仅预示着信息时
|
9月前
|
移动开发 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第29天】 随着移动开发技术的不断进步,开发者寻求更高效、更简洁的方式来编写代码。在Android平台上,Kotlin语言凭借其现代化的特性和对协程的原生支持,成为提高开发效率的关键。本文将深入分析Kotlin协程的核心优势,并通过实例展示如何在Android应用开发中有效地利用协程来处理异步任务,优化性能,以及提升用户体验。通过对比传统线程和回调机制,我们将揭示协程如何简化异步编程模型,并减少内存消耗,使应用更加健壮和可维护。
|
9月前
|
存储 分布式计算 Java
深入探究JAVA编程语言:概念、应用与实例分析
**JAVA**是广泛应用的高级编程语言,以其易学性、跨平台能力和高效的性能著称。它采用面向对象编程,强调封装、继承和多态,且具备平台无关性、内置安全性和多线程支持。JAVA广泛应用于Web开发(如JSP、Servlet)、移动应用(Android开发)、大数据处理(Hadoop、Spark)和桌面应用。通过一个计算两数之和的简单示例,展示了JAVA的易读性和面向对象特性,帮助读者理解JAVA在实际开发中的运用。
|
9月前
流式系统:第五章到第八章
流式系统:第五章到第八章
76 0
|
安全 Java 数据处理
Python多线程编程:概念、技巧及最佳实践
Python多线程编程:概念、技巧及最佳实践
|
存储 Rust 自然语言处理
当谈论协程时,我们在谈论什么
「什么是协程?」几乎是现在面试的必考题。 一方面,Donald E. Knuth 说「子过程是协程的一种特殊表现形式」;另一方面,由于 coroutine 的中文翻译「协程」中包含有「程」字,因此一般会拿来与「进程」、「线程」进行比较,称为「轻量级线程」。
|
消息中间件 存储 缓存
快学Actor编程
快学Actor编程
216 0
|
Web App开发 前端开发 JavaScript