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中文網其他相關文章!