Akka Quick Start

- 1 min

最近刚使用Vert.x重构了一个项目,被Vert.x高性能、全异步、Reactive编程模型震撼到了;同样是实现了Actor模型的另一个框架Akka,也很优秀,两个框架Slogon都很神似,最近准备研究对比下两个框架的实现。这篇文章只是简单的akka快速了解和上手。

Vert.x Slogon

Vert.x is a toolkit for building reactive applications on the JVM.

Akka Slogon

Akka is a toolkit for building highly concurrent, distributed, and resilient message-driven applications for Java and Scala.

Actor Model

Actor对没接触过这个概念的人可能不太好理解,Actor的概念其实和OO里的对象类似,是一种抽象。面对对象编程对现实的抽象是对象=属性+行为(method),但当使用方调用对象行为(method)的时候,其实占用的是调用方的CPU时间片,是否并发也是由调用方决定的。这个抽象其实和现实世界是有差异的。现实世界更像Actor的抽象,互相都是通过异步消息通信的。

所以Actor有以下特征:

Actor遵循以下规则:

Actor 目标

Actor 实现

Actor vs Goroutine

Goroutine很大程度上降低了并发的开发成本,是不是我们所有需要并发的地方直接 go func 就搞定了呢?

Go通过Goroutine的调度解决了CPU利用率的问题。但遇到其他的瓶颈资源如何处理?比如带锁的共享资源,比如数据库连接等。互联网在线应用场景下,如果每个请求都扔到一个Goroutine里,当资源出现瓶颈的时候,会导致大量的Goroutine阻塞,最后用户请求超时。这时候就需要用Goroutine池来进行控流,同时问题又来了:池子里设置多少个Goroutine合适?所以这个问题还是没有从更本上解决。

Akka Actor Quickstart

定义 Actors 和 Messages

创建 Actors

异步通信

Running

    mvn compile exec:exec
    mvn test

参考

comments powered by Disqus
rss github weibo twitter instagram pinterest facebook linkedin stackoverflow reddit quora mail