上一篇谈到Flink的checkpoint通信的消息驱动用到了Akka,这篇就简介一下Akka的actor模型,并尽可能复习一些以往的框架和多线程知识。
一,基础概念
了解Akka是什么之前,要知道一些我们常见且常用的基础概念。
1. 并发与并行(Concurrency & Parallelism)
并发和并行概念类似但有不同,并发指的是两个或多个任务能一同进行下去,但不一定会在同时执行。举个例子,我们把任务分块并有序执行这些混合任务的任务块。而并行指的是时间上确切地同时执行。
2. 同步和异步(Synchronous & Asychronous)
同步指方法调用的线程会等到结果返回或抛出异常再进行下去;异步指方法调用的线程允许等到过程中去做其他事,等到结果返回会通过额外机制通知该线程取结果(比如registered callback, a Future, or a message)
3. 阻塞与非阻塞(Blocking & Non-blocking)
阻塞指某个线程可以无限期延误其他线程的机制,比如互斥锁机制就是这样,如果一个线程得到锁资源,其他线程只能等待资源释放。非阻塞更开放,被延误的线程不用挂起,可以做其他的事。
4. 死锁,饥饿,活锁(Deadlock, Starvation, Live-lock)
死锁是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相循环等待的现象。
饥饿是指在为了解决死锁情况,我们