1.Actor模型
在使用Java進(jìn)行并發(fā)編程時(shí)需要特別的關(guān)注鎖和內(nèi)存原子性等一系列線程問(wèn)題,而Actor模型內(nèi)部的狀態(tài)由它自己維護(hù)即它內(nèi)部數(shù)據(jù)只能由它自己修改(通過(guò)消息傳遞來(lái)進(jìn)行狀態(tài)修改),所以使用Actors模型進(jìn)行并發(fā)編程可以很好地避免這些問(wèn)題,Actor由狀態(tài)(state)、行為(Behavior)和郵箱(mailBox)三部分組成
狀態(tài)(state):Actor中的狀態(tài)指的是Actor對(duì)象的變量信息,狀態(tài)由Actor自己管理,避免了并發(fā)環(huán)境下的鎖和內(nèi)存原子性等問(wèn)題
行為(Behavior):行為指定的是Actor中計(jì)算邏輯,通過(guò)Actor接收到消息來(lái)改變Actor的狀態(tài)
郵箱(mailBox):郵箱是Actor和Actor之間的通信橋梁,郵箱內(nèi)部通過(guò)FIFO消息隊(duì)列來(lái)存儲(chǔ)發(fā)送方Actor消息,接受方Actor從郵箱隊(duì)列中獲取消息
Actor的基礎(chǔ)就是消息傳遞
2.使用Actor模型的好處:
事件模型驅(qū)動(dòng)--Actor之間的通信是異步的,即使Actor在發(fā)送消息后也無(wú)需阻塞或者等待就能夠處理其他事情
強(qiáng)隔離性--Actor中的方法不能由外部直接調(diào)用,所有的一切都通過(guò)消息傳遞進(jìn)行的,從而避免了Actor之間的數(shù)據(jù)共享,想要
觀察到另一個(gè)Actor的狀態(tài)變化只能通過(guò)消息傳遞進(jìn)行詢問(wèn)位置透明--無(wú)論Actor地址是在本地還是在遠(yuǎn)程機(jī)上對(duì)于代碼來(lái)說(shuō)都是一樣的
輕量性--Actor是非常輕量的計(jì)算單機(jī),單個(gè)Actor僅占400多字節(jié),只需少量?jī)?nèi)存就能達(dá)到高并發(fā)
3.Actor模型原理
以下通過(guò)學(xué)生與教師之間的郵件通信來(lái)理解akka中的Actor模型