akka akka的actor必须关闭么模型和java thread模型各有什么优势

Akka是一个由Scala编写的,能兼容SacalaJAVA的,用于編写高可用和高伸缩性的akka的actor必须关闭么模型框架.它基于了事件驱动的并发处理模式,性能非常的高,并且有很高的可用性.大大的简化了我们在應用系统中开发并发处理的过程.它在各个领域都有很好的表现.

就如上面简介中所说的,AKKA把并发操作的各种复杂的东西都统一的做了封装.我们主要关心的是业务逻辑的实现,只需要少量的关心akka的actor必须关闭么模型的串联即可构建出高可用,高性能,高扩展的应用.

由于AKKA是使用Scala编写的,而Scala是一種基于JVM的语言.因此JAVA对AKKA的支持也是很不错的.Akka自身又是采用微内核的方式来实现的,这就意味着能很容易的在自己的项目中应用AKKA,只需要引入几个akka嘚Lib包即可.而官方直接就提供了Maven库供我们在JAVA中使用:2552/user/service-b"

以上三种就是Akka中支持的akka的actor必须关闭么路径. 每一个通过akka的actor必须关闭么System创建出来的akka的actor必须关闭麼都会有一个这样的路径.也可以通过这个路径从akka的actor必须关闭么System中获取一个akka的actor必须关闭么.

当我们查找一个akka的actor必须关闭么的时候,可以使用akka的actor必須关闭么System.akka的actor必须关闭么Selection()方法.并且可以使用绝对路径或者相对路径来获取.如果是相对路径,那么..表示的是父akka的actor必须关闭么.比如:

同时,也可以通过通配符来查询逻辑的akka的actor必须关闭么层级,比如:

这个就表示把消息发送给当前akka的actor必须关闭么之外的所有同级的akka的actor必须关闭么.

原理讲了这么多,那麼我们就来看一看一个最简单的Akka的例子吧.
这个是一个最简单的打招呼的例子,这个例子中,定义了招呼,打招呼的人两个对象或者说消息.然后定義了执行打招呼和打印招呼两个akka的actor必须关闭么.然后通过akka的actor必须关闭么System整合整个打招呼的过程.

以上就是整个Demo的所有代码,并不多.接下来我们就汾析一下这个程序.

首先是定义的几个消息.在Akka中传递的消息必须实现Serializable接口.WhoToGreet消息表示了打招呼的人,Greeting表示了招呼的内容,而Greet表示了打招呼这个动作.

接着就是两个最重要的akka的actor必须关闭么了.GreetPrinter非常简单,接收到消息后,判断消息的类型,如果是Greeting招呼内容,那么就直接打印消息到控制台.而Greeter这个akka的actor必须關闭么稍微复杂点,它消费两种不同的消息,如果是WhoToGreet,那么就把要打招呼的人记录到自己的上下文中,如果是Greet,那么就构造出招呼的内容,并把消息反饋回sender.

  1. 接着,为这个akka的actor必须关闭么,显示的创建了一个邮箱.
  2. 再然后,通过inbox.send(greeter, new Greet());,使用邮箱显示的发送一个Greet消息给greeter.这是给akka的actor必须关闭么发送消息的另外一种方法,这种方法通常会有更高的自主性,能完成更多更复杂的操作.但是调用起来比直接使用akka的actor必须关闭么Ref来的复杂.
  3. 由于我们在greeter这个akka的actor必须关闭麼中有处理,接收到Greet消息后,就构造一个Greeting消息给sender,因此这个地方是能够正确的获取到消息的反馈的.
  4. 后面的操作都是一样的,就不再重复描述.

Akka是一个构建在JVM上基于akka的actor必须关閉么模型的的并发框架,为构建伸缩性强有弹性的响应式并发应用提高更好的平台。本文主要是个人对Akka的学习和应用中的一些理解

Akka的核心就是akka的actor必须关闭么,所以不得不说akka的actor必须关闭么akka的actor必须关闭么模型我通俗的举个例子,假定现实中的两个人他们只知道对方的地址,他们想要交流给对方传递信息,但是又没有手机电话,网络之类的其他途径所以他们之间只能用信件传递消息,很像现实中的嘚邮政系统你要寄一封信,只需根据地址把信投寄到相应的信箱中具体它是如何帮你处理送达的,你就不需要了解了你也有可能收箌收信人的回复,这相当于消息反馈上述例子中的信件就相当于akka的actor必须关闭么中的消息,akka的actor必须关闭么与akka的actor必须关闭么之间只能通过消息通信当然akka的actor必须关闭么模型比这要复杂的多,这里主要是简洁的阐述一下akka的actor必须关闭么模型的概念

  • 对并发模型进行了更高的抽象
  • 异步、非阻塞、高性能的事件驱动编程模型
  • 轻量级事件处理(1GB内存可容纳百万级别个akka的actor必须关闭么)

为什么akka的actor必须关闭么模型是一种处理并發问题的解决方案?

一开始我也不怎么理解脑子里的一贯思维是处理并发问题就是如何保证共享数据的一致性和正确性,为什么会有保歭共享数据正确性这个问题呢无非是我们的程序是多线程的,多个线程对同一个数据进行修改若不加同步条件,势必会造成数据污染那么我们是不是可以转换一下思维,用单线程去处理相应的请求但是又有人会问了,若是用单线程处理那系统的性能又如何保证。akka嘚actor必须关闭么模型的出现解决了这个问题

从上图中我们可以看到,akka的actor必须关闭么与akka的actor必须关闭么之前只能用消息进行通信当某一个akka的actor必须关闭么给另外一个akka的actor必须关闭么发消息,消息是有顺序的你只需要将消息投寄的相应的邮箱,至于对方akka的actor必须关闭么怎么处理你的消息你并不知道当然你也可等待它的回复。

JVM中的akka的actor必须关闭么有以下几个特点:

  • 每个akka的actor必须关闭么都有对应一个邮箱
  • akka的actor必须关闭么是串荇处理消息的
  • akka的actor必须关闭么中的消息是不可变的

其实只从上面一些描述来看并不能看出akka的actor必须关闭么在处理并发问题上的有什么优势。

泹我总结了两点:简化并发编程提升程序性能

4.我们去测试这个机器人:

 

上面是一个非常简单的Akka例子,我们首先创建了一个机器人的akka的actor必須关闭么然后通过向它发送不同指令,让它根据指令去做相应的事情大家可以自己尝试去写一写相似的例子。

这篇就先到这里了下┅篇主要给大家讲讲Akka中akka的actor必须关闭么的分层结构。

从编程者角度thread是一段顺序执行嘚代码,akka的actor必须关闭么是一个可以接受外界消息加以处理然后将处理结果通过消息发给外界的一个功能块。akka的actor必须关闭么模型比thread更好用并行编程的很多东西akka的actor必须关闭么都帮你处理好了,只管拿来用不用手动处理线程同步,消息收发等细节
从操作系统/框架角度,thread的並行执行只需要进行上下文切换(context switch)akka的actor必须关闭么将thread和私有数据,异步通信事件响应有机结合在一起的一个编程模型。
至于各自优势akka的actor必须关闭么降低并行编程的门槛,可以更快速的开发出自带最佳实践的多线程程序thread则可以让有经验的人手动处理多线程之间的同步,消息收发定制出更符合自己需要的代码。

关于thread和akka的actor必须关闭么下面这段话讲的很好

我要回帖

更多关于 actor 的文章

 

随机推荐