Scala併發編程特點

首先,java基本滿足了相互獨立且同時執行的併發處理的操作,java通過數據鎖的概念和共享數據的概念實現了多線程併發情況下的數據操作管理
當多個線程對共享數據訪問時,有一個監視器的東西再起作用,監視器會管理各線程對共享數據的操作
Scala併發編程:
Actor相當於java中的Thread、Runnable,原理:
1、通過發消息、消息隊列傳輸、接收消息的方式實現了多線程
2、每個線程相當於一個郵箱,可以接收不同的消息郵件
基於Actor的框架Akka實現併發編程(比較重要)
如下兩種方式:
通過繼承Actor實現多線程方法
匿名函數Actor實現多線程
原理:
1、receive接收到消息時先判斷接收消息是否與case模式匹配,即isDefinedAt是否爲true,如果匹配,則將消息傳遞給偏函數apply方法,然後執行case,
2、receive偏函數有一個apply方法,如果沒有匹配到key,則忽略掉此消息,actor一直處在阻塞中,即等待接收消息

併發編程原生線程Actor、Cass Class下的消息傳遞和偏函數
這裏寫圖片描述
注:
1、actor之間消息通訊用sender,相當於兩個郵箱之間的郵件傳遞方式
2、消息傳遞過程中用case class、case object(做到了消息傳遞過程中的不變性)、偏函數、模式匹配三者的結合比較常用
3、主線程也可以作爲actor使用,尤其有界面的scala編程中main編程至關重要
4、偏函數有很多種,receive將消息傳遞給偏函數,
5、消息傳遞時,可以傳遞收消息的actor,當actor收到消息時通過傳過來的actor進行消息回覆,最簡單的一種就是sender
6、傳遞消息的方式有很多種,例如:master、worker,state,sender等,
7、主線程用self.receive的方式接收來自其他actor的消息
非常非常重要

Scala併發編程react、loop
這裏寫圖片描述
這裏寫圖片描述
在scala中通過react、loop線程重用的方式提高性能
注:
每個actor都有自己的線程,原生的actor獨佔一個線程,當接收不到消息時,一直處於阻塞狀態,
通過react、loop實現線程的重用:
1、react執行完語句體之後沒有自己的返回,就此結束,所以可以釋放堆、棧,可以供其他actor享用
2、loop就是重複循環,跟繼承Actor,while(true)方式基本一致
以上方式在具體界面的交互中非常重要,與java中的多線程的實現基本一致,但是比java的多線程複用更加簡單

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章