`
沉沦的快乐
  • 浏览: 56854 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

并发编程之akka简介

阅读更多

什么是akka

    akka是一个用scala编写的库,用于简化编写可容错的,可扩展的,高并发应用。akka使用actor模型来提升抽象能力,提供更好的平台来构建可扩展的,弹性的应用。对于比较难处理的错误,akka采用“let it crash”模型来处理,这种模式可以使得一个任务的处理失败不会导致整个应用的crash,使你的系统拥有强大的自愈能力,也不需要重启来恢复系统。同时akka的分布式部署更加简单透明。

akka使用的两种方式

作为库使用:在大多数的web系统中,你可能更倾向与把akka作为一个jar包来使用,你可以直接把jar包拷贝到你的系统中,也可以通过maven依赖把jar包拉到你的项目项目中。

作为微核使用:作为独立service来部署应用。

为什么使用akka

      akka是一个可扩展性非常强的软件,这不仅不仅体现在性能上,而且还体现在它可适用的系统规模上。akka的核心包akka-actor非常小,对于已有的需要异步和无锁并发的系统而言,很容易就可以把akka融入进去。akka适用的前景非常广泛,可使用于金融系统,游戏,医疗,交通,仿真,数据分析等等场景,只要需要高吞吐量、低延迟的系统,akka就是一个可供选择的对象。下面是akka的几个主要特性:

actor模型

    actor模型并非什么新鲜事务,它早在20世纪70年代就被提出了,主要目的是为了解决分布式编程中的一系统问题。actor模型具有以下优点:

1.更简单的、高度抽象的并发处理。

2.异步的,非阻塞的,高性能的事件驱动编程模型

3.非常轻量级的事件驱动处理。kaka处理任务的模式是一个任务一个actor,而不是一个任务一个线程。相比创建一个线程对象所需要的庞大字段而言,创建一个actor的代价非常小,基本在300字节左右。1GB内存可以创建几百万actor。

错误容忍

使用“let-it-crash”模型处理错误。前面说了kaka处理任务的模式是一个任务一个actor,而不是一个任务一个线程。所有的actor在线程上运行。如果一个actor出错了,就让这个actor销毁好了,而不会影响运行它的线程,该线程可以继续处理其他任务。而如果基于一个任务一个线程的模式,一个错误可能导致线程死锁,异常中断等,进而导致整个系统crash。

可以跨多个jvm处理错误

强大的系统自愈能力,不需要重启系统

 

位置透明性

      akka中所有的东西处理都是在分布式环境中,所有的actors之间的交互都是通过message来完成的,所有的事件都是异步的。所以一个actor不需要知道其他的actor的内部状态,运行方式,所处节点等等。

 

持久性

      当一个actor正在启动或重启时,它接收到的消息将会保持住或者重新发送。这个机制使得actor在jvm崩溃或者该actor迁移到其他节点之后,仍然可以恢复自己的状态。

 

与java项目兼容

  scala是jvm上运行的,akka库可以直接作为jar包在java项目中使用,而java作为目前排行前三的热门语言之一,无疑为akka的使用提供了丰富的场景。对于广大java开发者而言,降低了学习成本,也减少了项目改造的成本。另外,akka相对于go,erlang等热门并发语言而言,应该各有各的优点。关于akka与erlang的优劣,大家可以参考下《并发需求下的Scala及Erlang语言的比较与使用》

分享到:
评论

相关推荐

    读书笔记:Scala支持的著名的并发编程框架Akka的学习记录.zip

    读书笔记:Scala支持的著名的并发编程框架Akka的学习记录

    scala并发编程开发教程

    总结来说,Scala并发编程借助Akka提供的Actor模型,可以轻松构建并发和分布式系统,降低了并发编程的复杂性,提高了系统的可扩展性和容错性。在Spark这样的大数据处理框架中,Akka的Actor模型是实现高效RPC通信的...

    基于AKKA实现的搞并发设计

    在AKKA框架中,一个重要的设计理念是“以消息传递为中心”,这与传统的共享状态并发编程模型有所不同。 在传统的并发编程模型中,开发者需要处理共享状态、线程同步、锁竞争、并发集合、线程通知等复杂的问题。这些...

    Akka简介.pptx

    由于Scala是运行在JVM上的,它天生适合进行并行和并发编程,这使得Akka在处理复杂分布式系统时表现得尤为出色。 Actor模型是Akka的核心概念。在并发编程中,Actor模型提供了一种有效的抽象,将并发问题简化为Actor...

    《java并发编程的核心方法和框架》

    Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。《java并发编程的核心方法和框架》这本书旨在深入探讨这一主题,帮助开发者掌握Java...

    Akka Concurrency

    通过将并发控制权交给了Actor,Akka简化了并发编程,并使其更加直观。 #### 二、Akka的核心概念 1. **Actor模型**:Actor是Akka的核心概念之一。每个Actor都有自己的状态,能够接收消息并对其作出响应。Actor之间...

    Akka 基础学习pdf中文文档

    第 5 章 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞 I/O 的处理以 及 API。 第 6 章 横向扩展—集群化:集群、CAP 理论以及 Akka Cluster。 第 7 章 处理邮箱问题:加大邮箱负载、不同邮箱的选择、...

    Akka Scala 学习高清原版pdf

    标题“Akka Scala 学习高清原版pdf”表明该文档是一个专注于Scala语言在Akka框架中应用的指南,而“描述”则指出文档内容涵盖Scala实现的Akka并发编程。标签“Akka scala 并发 actor”则进一步具体化了文档内容,即...

    Artima.Akka.Concurrency

    传统的并发编程往往复杂且容易出错,但Akka提供了一种模型,它基于actor模型,通过在Akka中定义独立的、消息驱动的actor来构建软件。这种模型使得并发逻辑更加清晰,并有助于管理多核处理器和分布式系统中的状态和...

    Akka开发库开发包

    Akka是一个用Scala语言开发的高性能、分布式计算框架,它主要在Java和Scala环境中使用。Akka库的设计理念是提供一种高效、容错且可...通过STM和Actor模型,它简化了并发编程的难度,同时也提高了系统的性能和可靠性。

    Akka入门与实践

    第 5 章 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞 I/O 的处理以 及 API。 第 6 章 横向扩展—集群化:集群、CAP 理论以及 Akka Cluster。 第 7 章 处理邮箱问题:加大邮箱负载、不同邮箱的选择、...

    akka学习入门实践

    - **目标**:Akka 的主要目标是简化并发编程,使得开发者能够轻松构建分布式系统,这些系统具有高容错性和可扩展性。 - **特点**: - **高性能**:Akka 设计为轻量级、高效的并发模型。 - **容错性**:通过内置的...

    Learning Akka

    通过阅读《Learning Akka》,开发者不仅能掌握Akka的基本用法,还能深入理解反应式编程的哲学,提升构建大规模并发、分布式的系统能力。书中丰富的示例和实用的指导将有助于读者在实际项目中充分利用Akka的优势。

    java自带并发框架

    Java并发框架是Java JDK中内置的一系列用于处理多线程并行执行的工具和类库,自JDK 5.0引入以来,极大地简化了并发编程的复杂性。这个框架由Doug Lea设计,并在JSR-166任务中提出,最终在Tiger(JDK 5)版本中被引入...

    c#分布式框架akka范例

    这种方式极大地简化了并发编程,因为Actor之间不存在共享状态,从而避免了常见的并发问题,如竞态条件和死锁。 **Akka.NET**提供了几个关键组件,包括Actors、Streams、Remote、Cluster和Persistence等。在这些范例...

    akka框架,应用于scala

    Akka之所以使用Scala语言编写,是因为Scala的强大特性和其与JVM的无缝集成,使得Akka能够充分利用JVM的优势并发挥出Scala的函数式编程和面向对象编程的双重优势。同时,Akka也提供了对Java的全面支持,开发者可以...

    测试用例-测试用例之akka.zip

    综上所述,"测试用例-测试用例之akka.zip"包含的测试用例文件很可能是针对上述各个知识点的具体实现,通过这些用例,我们可以全面评估和优化Akka应用程序的性能、稳定性和正确性。在实际项目中,执行这些测试用例将...

    akka实例参考

    Akka 是一个强大的开源工具,主要用于构建高度并发、分布式和反应式的应用程序,主要在Java和Scala语言环境下使用。它的核心设计理念是Actor模型,这使得它能够处理大量的并发操作,同时保持系统的可扩展性和容错性...

Global site tag (gtag.js) - Google Analytics