天天看點

讨喜的隔離可變性-前言

曾有個的醫囑是這樣說的:“如果它傷到了你,那就别再用它了”。在并發程式設計領域,共享可變性就是那個“它”。

雖然jdk的線程api使我們可以非常容易地建立線程,但如何防止線程沖突和邏輯混亂卻又成了大問題。stm雖然可以解決部分問題,但是在一些類似java這樣的語言中,我們仍不得不非常小心謹慎地避免非托管可變變量和事務邏輯中産生某些副作用。而令人驚訝的是,當共享可變性消失的時候,所有那些令人糾結的問題也都随之消失了。

雖然這種方法已經問世多年了,但在jvm領域卻還是相對較新的技術。基于角色(actor)的模型在erlang中是非常成功的(參見《programming erlang: software for a concurrent world》[arm07]以及《concnrrent programming in erlang》[vwwa96])。而當scala 2003年被引入時,erlang的基于角色(actor)的模型也同時被采納并引入到jvm大家庭中(參見《programming in scala》[osv08]以及《programming scala》[sub09])。

在本章中,我們将學習如何編寫基于角色(actor)的并發程式。在大多數情況下,我們将使用akka以便能夠直奔核心概念。akka是一個基于scala的高性能解決方案,同時還提供了相當好用的java api。我們既可以将其用于基于角色(actor)的并發,也可以将之用于stm(參見第6章)。

<a href="http://ifeve.com/actor/" target="_blank">讨喜的隔離可變性-前言</a>

<a href="http://ifeve.com/actor-1/" target="_blank">讨喜的隔離可變性(一)用角色實作隔離可變性</a>

<a href="http://ifeve.com/actor-2/" target="_blank">讨喜的隔離可變性(二)角色的特性</a>

<a href="http://ifeve.com/actor-3/" target="_blank">讨喜的隔離可變性(三)建立角色</a>

<a href="http://ifeve.com/actor-4/">讨喜的隔離可變性(四)收發消息</a>

<a href="http://ifeve.com/actor-5/">讨喜的隔離可變性(五)同時使用多個角色</a>

<a href="http://ifeve.com/actor-6/" target="_blank">讨喜的隔離可變性(六)多角色協作</a>

<a href="http://ifeve.com/actor-7/" target="_blank">讨喜的隔離可變性(七)使用類型化角色</a>

<a href="http://ifeve.com/actor-8/">讨喜的隔離可變性(八)類型化角色和murmurs</a>

<a href="http://ifeve.com/actor-10/" target="_blank">讨喜的隔離可變性(十)使用transactor</a>

<a href="http://ifeve.com/actor-11/" target="_blank">讨喜的隔離可變性(十一)調和類型化角色</a>

<a href="http://ifeve.com/actor-12/" target="_blank">讨喜的隔離可變性(十二)基于角色模型的局限性和小結</a>

<a href="http://ifeve.com/actor-13/" target="_blank">讨喜的隔離可變性(十三)角色的特性</a>