Erlang在1991年由愛(ài)立信公司向用戶(hù)推出了第一個(gè)版本,經(jīng)過(guò)不斷的改進(jìn)完善和發(fā)展,在1996年愛(ài)立信又為所有的Erlang用戶(hù)提供了一個(gè)非常實(shí)用且穩(wěn)定的OTP軟件庫(kù)并在1998年發(fā)布了第一個(gè)開(kāi)源版本。 (推薦學(xué)習(xí):go)
目前Erlang同時(shí)支持的操作系統(tǒng)有l(wèi)inux,windows,unix等,可以說(shuō)適用于主流的操作系統(tǒng)上,尤其是它支持多核的特性非常適合現(xiàn)在的多核CPU,而分布式特性也可以很好融合目前的各種分布式集群。
Go語(yǔ)言是編程語(yǔ)言設(shè)計(jì)的又一次嘗試,是對(duì)類(lèi)C語(yǔ)言的重大改進(jìn),它不但能讓你訪(fǎng)問(wèn)底層操作系統(tǒng),還提供了強(qiáng)大的網(wǎng)絡(luò)編程和并發(fā)編程支持。Go語(yǔ)言的用途眾多,可以進(jìn)行網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。
Go語(yǔ)言的推出,旨在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,具有“部署簡(jiǎn)單、并發(fā)性好、語(yǔ)言設(shè)計(jì)良好、執(zhí)行性能好”等優(yōu)勢(shì),目前國(guó)內(nèi)諸多 IT 公司均已采用Go語(yǔ)言開(kāi)發(fā)項(xiàng)目。
Erlang和golang的區(qū)別:
第一對(duì)鎖的態(tài)度不同,第二對(duì)異步IO的態(tài)度不同,第三消息機(jī)制不同。Erlang對(duì)鎖非常反感,認(rèn)為變量不可變可以很大程度避免鎖。
Golang的觀點(diǎn)是鎖確實(shí)有很大的負(fù)擔(dān),但是鎖基本上是無(wú)法避免的,一旦有人共享狀態(tài)并且互相搶占去改變他,這時(shí)候鎖是必須存在的。
Erlang服務(wù)器是單進(jìn)程的,是邏輯上就沒(méi)有并發(fā)的東西,一個(gè)Process就是一個(gè)執(zhí)行體,所以Erlang的服務(wù)器和golang的服務(wù)器不一樣,golang的服務(wù)器是多進(jìn)程的(goroutine)一起構(gòu)成的一個(gè)服務(wù)器。每個(gè)請(qǐng)求建立一個(gè)獨(dú)立的進(jìn)程(goroutine)。
但是Erlang不同,一個(gè)服務(wù)器就是一個(gè)單進(jìn)程的,所有的并發(fā)請(qǐng)求都進(jìn)入到了進(jìn)程郵箱,然后這個(gè)服務(wù)器從進(jìn)程郵箱里取郵件(請(qǐng)求的內(nèi)容)處理,Erlang的服務(wù)器并沒(méi)有并發(fā)的請(qǐng)求,所以不需要所鎖。
Erlang的高并發(fā)實(shí)現(xiàn),第一:每個(gè)Erlang的物理進(jìn)會(huì)有很多的服務(wù)器,每個(gè)服務(wù)器是互相無(wú)干擾的,他們可以并發(fā)。第二是單服務(wù)器高并發(fā)使用的是異步IO。
go認(rèn)為何時(shí)都不應(yīng)該有異步IO的代碼,Erlang則是在異步IO的基礎(chǔ)上加上輕量級(jí)進(jìn)程模型的混雜。
Golang對(duì)并發(fā)的支持,第一:價(jià)值回歸,golang最重要的事情是讓執(zhí)行成本降低,golang的棧最小可以到4K。
第二:把執(zhí)行體作為語(yǔ)言?xún)?nèi)建的標(biāo)準(zhǔn)設(shè)施(golang的代碼風(fēng)格只有標(biāo)準(zhǔn)化得一種)。go得并發(fā)模型是最古老的并發(fā)模型,該并發(fā)模型包括,routine,原子操作,互斥體,同步,消息,同步IO。