其他編程語言提供了哪些庫來提供Erlang風格的併發模型(進程,郵箱,模式匹配接收等)?其他語言的Erlang風格的併發性
注:我特別感興趣的是與Erlang類似的東西,而不僅僅是任何線程庫或排隊庫。
其他編程語言提供了哪些庫來提供Erlang風格的併發模型(進程,郵箱,模式匹配接收等)?其他語言的Erlang風格的併發性
注:我特別感興趣的是與Erlang類似的東西,而不僅僅是任何線程庫或排隊庫。
消息傳遞接口(MPI)(http://www-unix.mcs.anl.gov/mpi/)是一個用於並行編程的高度可擴展和強大的庫,面向C的原始版本,但現在可用於幾種版本http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations。雖然這個庫沒有引入新的語法,但它提供了一種通信協議來協調可並行化的例程之間的數據共享。
傳統上,它被用於大型集羣計算而不是單一系統的併發,儘管多核系統當然可以利用這個庫。
並行編程問題的另一個有趣的解決方案是OpenMP,它試圖在各種平臺上提供可移植擴展,以向編譯器提供關於哪些代碼段容易並行化的提示。
例如(http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):
#define N 100000
int main(int argc, char *argv[])
{
int i, a[N];
#pragma omp parallel for
for (i=0;i<N;i++)
a[i]= 2*i;
return 0;
}
有優點和缺點這兩個,當然,但前者已被證明是在學術界和其他重型科學計算的應用非常成功。因人而異。
Microsoft的Concurrency and Coordination Runtime for .NET。
的CCR是適合於該 部件分離成片,可以 僅通過消息交互的應用程序 模型。 這個模型中的組件需要手段 消息之間的協調,處理 複雜的故障情況,和 有效地處理異步 編程。
斯卡拉支持演員。但我不會打算scala故意類似於Erlang。
儘管如此scala絕對值得一看!
另外kilim是一個java庫,它將erlang風格的消息傳遞/參與者引入Java語言。
對於python,您可以嘗試使用processing module。
Mike Rettig創建了一個名爲Retlang的.NET庫和一個名爲Jetlang的Java端口,它受Erlang併發模型的啓發。
Ulf Wiger有一個偉大的職位最近關於這個主題 - 在這裏是因爲需要纔可以調用的東西「二郎風格併發」,他定義的屬性:
上面的第2個數字最難支持最初並未設計爲併發的VM和語言實現。這並不是要在其他語言中推敲Erlang-ish併發實現,但是很多Erlang的價值來自於能夠創建進程的百萬,如果進程抽象與OS具有1-1關係,這非常困難級別的線程或進程。在上面的鏈接中,Ulf有很多這方面的內容。
Termite for Gambit Scheme。
如果您在使用Ruby,看看Revactor的:http://revactor.org/][1]
Revactor的是Ruby 1.9的Actor模型的實現建立在啓高性能事件庫的頂部。 Revactor主要用於編寫類似Erlang的網絡服務和工具。
看看這個代碼示例:
myactor = Actor.spawn do
Actor.receive do |filter|
filter.when(:dog) { puts "I got a dog!" }
end
end
Revactor的只能運行在Ruby 1.9的。我相信圖書館的作者已經停止了維護,但他們網站上的文檔非常好。
您可能還想看看Reia:一種構建在Erlang虛擬機之上的ruby式腳本語言。 Reia是Revactor創造者的新項目:Tony Arcieri。
微軟不生產,現成的答案二郎:Microsoft Axum
JoCaml OCaml的延伸與加盟結石併發和分佈式編程。
Akka(http://akka.io)受Erlangs OTP嚴重影響。它建立在scala的角色之上,並且非常適合JVM上的併發。
這裏的主要困難是,儘管你可以用其他語言傳遞消息,但是模仿Erlang使用大量進程是非常困難的。 Erlang中的產卵過程類似於在Java或Python中實例化對象 - 您不需要考慮。如果您在操作系統級別執行此操作,您將很快耗盡資源,這意味着它不僅僅是消息傳遞,而且還必須將其合併到架構中。在這方面,Erlang的虛擬機有點難以遵循。當然,並非每個問題都需要數百萬個併發進程。 – zxq9 2014-10-01 10:52:56