為什麼說一門程式語言在語言層面支援併發呢?

時間 2021-05-31 22:28:41

1樓:

面向併發並行要寫的爽,需要一系列基礎設施,除了 M:N 的排程模型外,還有:

1 訊息佇列及其公平排程

2 活動物件(輕量級程序)的故障隔離和監控3 immutable 資料結構

4 如果是 gc 語言,還要支援 private heap / shared heap,才能做到輕量級程序間的 gc 基本互不干擾,如果是靜態型別語言,還要有相應的複雜的型別系統支援

go 還差的比較多(只有1勉強),Erlang 做到了 1-4,rust 有望通過庫做到 1/3/4。

2樓:

golang語言在語言層面支援併發是通過關鍵字go,其實任何乙個程式語言在語法層面實現同樣的功能都很容易,真正難的是實現goroutine的排程器。因為M:N的對映模型,語言實現者必須考慮很多情況,乙個好的排程方案才是必須的。

而go語言真正的方便之處就是它的排程器,而且還在不斷的改進,開發者自然可以創造很多goroutine而不必擔心,這些是真正的吸引開發者的地方。

3樓:

摘自《Erlang程式設計2th

程式語言有兩種:順序和併發。順序語言被設計用於編寫順序程式,沒有描述併發計算的語言結構。併發程式語言被設計用於編寫併發程式,語言本身帶有表達併發性的特殊結構。

在Erlang中,併發性由Erlang虛擬機器提供,而非作業系統或任何的外部庫。在大多數順序程式語言裡,併發性都是以介面的形式提供,指向主機作業系統的內部併發函式。

Erlang的併發在所有作業系統上都有著相同的工作方式,要用Erlang編寫併發程式,只需要掌握Erlang,而不必掌握作業系統的併發機制。簡單一點,就是說其他語言,比如最典型的C系語言,其併發依賴於作業系統提供的介面,一般採用庫的形式來實現併發。而且,不同的作業系統由於其併發機制和提供的介面不一樣,其庫的實現也會有所差異,從而影響到上層庫使用者。

如果是從語言層面上就支援併發,比如跑在Erlang虛擬機器上的Erlang。你只需要掌握基本併發模型的語法,剩下的事情叫給虛擬機器去做。這樣,無論在那個作業系統上,你看到都是同樣併發的Erlang。

等於加了乙個抽象層。

如何快速學習一門程式語言?

十七 首先要看這門語言分哪些資料型別。例如整型,浮點型,字元型,undefined等等。然後要看如何定義常量和變數。然後看有哪些表示式,通常有算數表示式 a b a 等 和邏輯表示式 a b,a b等 等。再然後看有哪些語句,通常有順序語句 賦值 選擇語句 if else 重複語句 迴圈 等。然後看...

為什麼說日語是一門「曖昧」的語言?

納zhi豆子 日本整體的文化就是曖昧,委婉,所以導致他們說話時也會曖昧,委婉。日本人不想讓自己處於尷尬的局面,所以都會圓滑的處理人際關係。日本人不會直來直去,也不會把自己的意見直接說出來,需要讓聽的人自己去體會,誰白了就是你有什麼問題,他們不會直接說出解決辦法,而是讓你聽了他們的話之後自己想解決辦法...

HTML5 是一門程式語言嗎?

知則 按照維基百科上對 程式設計正規化 programming paradigm 的解釋。其實HTML,XML等也算是程式語言。只不過它們只能描述資料,不具有圖靈完備性。但是仍舊算一種正規化 百科裡的程式設計正規化分類圖里唯一一種圖靈不完備的正規化 描述性宣告式程式設計 Descriptive de...