scala系列 併發01

2021-09-16 23:28:13 字數 2588 閱讀 4882

最近研究了一些scala併發的知識,總結一下。

即時響應性是一項決定任何應用程式成敗的關鍵因素。有兩種方式來提高即時響應性:1.多執行緒,並行執行多個任務。2.有策略的計算,惰性執行任務。

1.短路控制,scala不會向前看,所以用到lazy。

注意:多個變數繫結,後續呼叫,順序不可預知。

2.惰性集合,建立臨時檢視,呼叫的時候立即求值。

3.無限流轉換有限流

有限序列

無限流-》stream

順序集合

順序集合上的方法行為:它們為它們的集合中的每個元素順序地執行它們的操作。

並行集合

,scala 都擁有其並行版本。例如,pararray 是array 對應的並行版本,同樣的,parhashmap、parhashset 和parvector 分別對應於hashmap、hashset 和vector。我們可以使用par()和seq()方法來在順序集合及其並行版本之間進行相互轉換。

簡介:acotr模式是一種併發模型與另一種模型共享記憶體完全相反,actor模型share nothing。

所有執行緒(或程序)通過訊息傳遞方式進行合作,這些執行緒(或程序)稱為actor,共享記憶體更適合單機多核的併發程式設計。

特點:注意:

示例:統計字串的次數。

import akka.actor._

import scala.collection.mutable

/** * 接收訊息

*/class messageactor extends actor

}case class play(role: string)

case class reportcount(role: string)

import akka.actor._

import akka.util.timeout

import akka.pattern.patterns

import scala.concurrent.await

import scala.concurrent.duration._

/** * acotr模式是一種併發模型與另一種模型共享記憶體完全相反,actor模型share nothing。

* 所有執行緒(或程序)通過訊息傳遞方式進行合作,這些執行緒(或程序)稱為actor,共享記憶體更適合單機多核的併發程式設計。

*/val system = actorsystem("sample")

val depp = system.actorof(props[messageactor])

val hanks = system.actorof(props[messageactor])

/***tell屬於發了就完,什麼都不管的型別。**/

depp ! play("depp1")

hanks ! play("hanks1")

depp ! play("depp1")

depp ! play("depp2")

println("sent roles to play ")

/*** 詢問(ask ?)模式,因為傳送一條訊息並等待響應可能會導致潛在的活鎖

* 訊息可能永遠不會到達,設定超時時間

*/implicit val timeout: timeout = timeout(2.seconds)

val depp1 = patterns.ask(depp, reportcount("depp1"), timeout)

val depp2 = patterns.ask(depp, reportcount("depp2"), timeout)

val hanks1 = patterns.ask(hanks, reportcount("hanks1"), timeout)

val depp1count = await.result(depp1, timeout.duration)

val depp2count = await.result(depp2, timeout.duration)

val hanks1count = await.result(hanks1, timeout.duration)

println(s"depp played depp1 $depp1count time(s)")

println(s"depp played depp2 $depp2count time(s)")

println(s"hanks played hanks1 $hanks1count time(s)")

val terminatefuture = system.terminate()

await.ready(terminatefuture, duration.inf)

}

結果:

playing depp1

playing hanks1

sent roles to play 

playing depp1

playing depp2

depp played depp1 2 time(s)

depp played depp2 1 time(s)

hanks played hanks1 1 time(s)

參考《scala實用指南》

scala高階特性 01

目標一 深入理解高階函式 高階函式 1.1概念 scala混合了物件導向和函式式的特性,我們通常將可以做為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是 頭等公民 高階函式包含 作為值的函式 匿名函式 閉包 柯里化等等。1.2作為值的函式 故名思議 函式的值作為返回值 1.3匿名函式 ...

erlang 併發程式設計 併發01

erlang純訊息傳遞式語言 特點 建立新程序 通過pid給次執行緒發訊息,mod模組,func方法,args傳入引數 pid spawn mod,func,args 新起乙個併發程序執行fun,fun的屬性是當前值 pid spawn fun 傳送訊息 pid message接受訊息 receiv...

Scala 系列 特質 Trait

本文主要對scala中特質的概念與使用進行介紹 特質是scala裡面 復用的基礎單元。與 python 不同,python 子類可以繼承自多個父類,而 scala 不允許乙個類從從個超類繼承,只能繼承唯一的超類。但是 scala 允許乙個類混入任意數量的特質,混入就是指類使用了特質提供的方法。那麼特...