Akka框架——第一节:并发编程简介

  • 时间:
  • 浏览:0
  • 来源:彩神欢乐生肖_神彩欢乐生肖官方

2 Actor模型

在使用Java语言进行并发编程时,需要很糙关注共享的数据形态,程序运行运行间的资源竞争容易由于 死锁等问提,而Actor模型便是要解决程序运行运行和锁带来的问提,Actor是并都是基于事件(Event-Based)的轻量级程序运行运行,在使用Actor进行并发编程时只需要关注代码形态,而需要过分关注数据形态,之前 Actor最大限度地减少了数据的共享。 Actor由十个 多重要帕累托图组成,它们是请况(state),行为(Behavior)和邮箱(Mailbox),Actor与Actor之间的交互通过消息发送来完成,Actor模型如图4所示,请况指的是Actor对象的变量信息,它可不可以 是Actor对象中的局部变量、占用的机器资源等,请况只会根据Actor接受的消息而改变,从而解决并发环境下的死锁等问提;行为指的是Actor的计算行为逻辑,它通过解决Actor接收的消息而改变Actor请况;邮箱(mailbox)建立起Actor间的连接,即Actor发送消息后,另外十个 多Actor将接收的消息装下 到邮箱中待后期解决,邮箱的内控 实现是通过队列来实现的,队列可不可以 是有界的(Bounded)也可不可以 是无界的(Unbounded),有界队列实现的邮箱容量固定,无界队列实现的邮箱容易不受限制。



图4 Actor模型

真难看出,Actor模型是对现实世界的宽度抽象,它具有如下特点:(1)Actor之间使用消息传递机制进行通信,传递的消息使用的是不可变消息,Actor之间未必共享数据形态,机会有数据共享则通过消息发送的办法 进行;(2) 各Actor后会 对应的mailbox,机会其它Actor向该Actor发送消息,消息将入队待后期解决;(3)Actor间的消息传递通过异步的办法 进行,即消息的发送者发送完消息后未必守候组阁 便可不可以 返回继承解决其它任务。

多核解决器的突然出现使并发编程(Concurrent Programming)成为开发人员必备的一项技能,有些现代编程语言都致力于解决并发编程问提。并发编程嘴笨 也能提高程序运行运行的性能,但传统并发编程的共享内存通信机制对开发人员的编程技能要求很高,需要开发人员通过自身的专业编程技能去解决死锁、互斥守候及竞争条件(Race Condition)等,熟悉Java语言并发编程的读者们对你五种问提的理解会比较深刻,你五种问提使得并发编程比顺序编程要困难得多。

Scala语言并不到 直接使用Java语言提供的并发编程库,就是 通过Actor模型来解决Java并发编程中遇到的各种问提,为并发编程提供了更高级的抽象。

1 重要概念

(1)并发和并行

并发和并行从宏观来看,后会 为进行多任务运行,但并发(Concurrency)和并行(parallelism)两者之间是有区别的。并行是指十个 多机会十个 多以上任务在同一时刻同时运行,;而并发是指十个 多或十个 多以上的任务在同一时间段内运行,即十个 多时间段中含哪几个任务都占据 已启动运行到运行完毕之间,这若干任务在同一CPU上运行但任十个 多时刻点上只十个 多多任务运行。图121给出了多核解决器下的现代操作系统程序运行运行运行和程序运行运行模型,图中程序运行运行运行2的程序运行运行1被调用度到解决器的核2上运行、程序运行运行运行3的程序运行运行1被调度到解决器的核3上运行,程序运行运行运行2的程序运行运行1和程序运行运行运行3的程序运行运行1是并行的,它们可不可以 同时运行,而程序运行运行运行1的程序运行运行1和程序运行运行2都调度到解决器的核1上运行,此外它们还共享程序运行运行1的内存空间,在运行时面临着资源竞争包括CPU、内存及其它如IO等,它们在同一以前不到运行十个 多,但在一段时间内都可不可以 运行,之前 程序运行运行运行1的程序运行运行1和程序运行运行2是并发执行的。



图1 程序运行运行运行、程序运行运行模型

(2)横向扩展和纵向扩展

所谓纵向扩展(Scale Up)指的是增加程序运行运行的进度或程序运行运行数量,提高程序运行运行的并发性;而横向扩展(Scale Out)指的是程序运行运行可不可以 扩展到其它机器上运行,即通过分布式系统来提到程序运行运行的并行度。传统的Java并发编程模型不容易进行纵向扩展,之前 并发的程序运行运行数越来越来越多,程序运行运行行为便会变得真难理解和控制,更多的程序运行运行加入到资源竞争,突然出现死锁等请况的概率增加。横向扩展比纵向扩展困难更大,此时的程序运行运行变为分布式环境下的应用,请况更为复杂性,对开发人员的要求更高。Scala提供的Actor模型可不可以 解决并发程序运行运行运行的横向扩展和纵向扩展问提,如图2、图3给出了基本Actor模型的横向扩展和纵向扩展。



图2 纵向扩展



图3 横向扩展

本节主要内容:

1. 重要概念

2. Actor模型

3. Akka架构简介

Scala学习(公众微信号:ScalaLearning)每天为亲戚亲戚一群人带来有些Scala语言、Spark、Kafka、Flink、AKKA等大数据技术干货及相关技术资讯。技术永无止境,勇攀高峰,一往直前!

嘴笨 文章不错?扫描关注

3 Akka并发编程框架

Scala语言中原生地支持Actor模型,只不过功能还不足英文强大,从Scala 2.10版本以前,Akka框架成为Scala包的一帕累托图,可不可以 在程序运行运行中直接使用。Akka框架作为Akka是十个 多以Actor模型为基础构建的基于事件的并发编程框架,底层使用Scala语言实现,提供Java和Scala并都是API,它属于LightBend公司(原Typesafe公司)体系形态的一帕累托图,如图5所示。



图5 Lightbend 体系形态[ ]

Akka框架意在复杂性高并发、可扩展及分布式程序运行运行运行的设计,它具有如下优势:

(1) 使用Akka框架编写的程序运行运行运行既可不可以 横向扩展(Scale Out)、也可纵向扩展(Scale Up)。

(2) 编写并发程序运行运行运行更简单,Akka提供了更高的抽象,开发人员只需要专注于业务逻辑,而我越来越多 像Java语言那样需要解决底级语义如程序运行运行、锁及非阻塞IO等。

(3) 高容错,Akka使用“let it crashes”机制,当Actor出错时可不可以 快速恢复。

(4) 事件驱动的架构,Akka中的Actor之间的通信采用异步消息发送,也能完美支持事件驱动。

(5) 位置透明,无论是Actor运行在本地机器还是远程机器上,对于用户来说后会 透明的,这极大地复杂性了多核解决器和分布式系统上的程序运行运行运行编程。

(6) 事务支持能力,支持软件事务内存(software transactional memory,STM),使Actor具有原子消息流的操作能力。

Akka框架由下列十个 组件构成:

(1) akka-actor :包括经典的Actor、Typed Actors、IO Actor等

(2) akka-remote:远程Actor

(3) akka-testkit:测试Actor系统的工具箱

(4) akka-kernel :Akka微内核,用于运行精简的微型程序运行运行运行服务器,我越来越多 运行于Java应用服务器上。

(5) akka-transactor :Transactors 即支持事务的 actors,集成了Scala STM

(6) akka-agent – 代理, 同样集成了Scala STM

(7) akka-camel – 集成Apache Camel

(8) akka-zeromq – 集成ZeroMQ 消息队列

(9) akka-slf4j – 支持SLF4J 日志功能

(10) akka-filebased-mailbox – 支持基于文件的mailbox