首頁 >後端開發 >Golang >erlang和golang的區別

erlang和golang的區別

(*-*)浩
(*-*)浩原創
2019-12-02 15:49:154980瀏覽

erlang和golang的區別

Erlang和golang的區別:

#第一對鎖的態度不同,第二對非同步IO的態度不同,第三訊息機制不同。 Erlang對鎖非常反感,認為變數不可變可以很大程度上避免鎖。

Golang的觀點是鎖確實有很大的負擔,但是鎖基本上是無法避免的,一旦有人共享狀態並且互相搶佔去改變他,這時候鎖是必須存在的。                 (建議學習:go

Erlang伺服器是單一進程的,是邏輯上就沒有並發的東西,一個Process就是一個執行體,所以Erlang的伺服器和golang的伺服器不一樣,golang的伺服器是多進程的(goroutine)一起構成的一個伺服器。每個請求建立一個獨立的進程(goroutine)。

但是Erlang不同,一個伺服器就是一個單一進程的,所有的並發請求都進入到了進程郵箱,然後這個伺服器從進程郵箱裡取郵件(請求的內容)處理,Erlang的伺服器並沒有並發的請求,所以不需要所鎖。

Erlang的高並發實作:

第一:每個Erlang的實體進會有很多的伺服器,每個伺服器是互相無幹擾的,他們可以並行.

第二是單一伺服器高並發使用的是非同步IO。

go認為何時都不應該有非同步IO的程式碼,Erlang則是在非同步IO的基礎上加上輕量級進程模型的混雜。

Golang對並發的支援:

第一:價值回歸,golang最重要的事情是讓執行成本降低,golang的堆疊最小可以到4K。

第二:以執行體當作語言內建的標準設施(golang的程式碼風格只有標準化得一種)。 go得並發模型是最古老的並發模型,該並發模型包括,routine,原子操作,互斥體,同步,訊息,同步IO。

以上是erlang和golang的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn