1. 對(duì)鎖的態(tài)度不同;
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括遼中網(wǎng)站建設(shè)、遼中網(wǎng)站制作、遼中網(wǎng)頁(yè)制作以及遼中網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,遼中網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到遼中省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
2. 對(duì)異步IO的態(tài)度不同;
3. 消息機(jī)制不同;
4. Erlang對(duì)鎖非常反感,認(rèn)為變量不可變可以很大程度避免鎖;而Golang的觀(guān)點(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)程的一起構(gòu)成的一個(gè)服務(wù)器,每個(gè)請(qǐng)求建立一個(gè)獨(dú)立的進(jìn)程。
而Erlang不同,一個(gè)服務(wù)器就是一個(gè)單進(jìn)程的,所以并發(fā)的請(qǐng)求都進(jìn)入到了進(jìn)程的郵箱,然后這個(gè)服務(wù)器從進(jìn)程郵箱里取郵件處理,Erlang的服務(wù)器并沒(méi)有并發(fā)的請(qǐng)求,所以不需要鎖。
您好,
1、erlang有異常成熟、經(jīng)過(guò)電信級(jí)別大規(guī)模驗(yàn)證的OTP應(yīng)用庫(kù),只需要很簡(jiǎn)單的代碼就能建立起異常穩(wěn)定、容錯(cuò)性強(qiáng)、擴(kuò)展性強(qiáng)、高并發(fā)的服務(wù)器框架,這也是erlang最寶貴的核心價(jià)值所在。
2、erlang是 天生的并發(fā)語(yǔ)言 : erlang的并發(fā)特性是語(yǔ)言級(jí)別的,從開(kāi)發(fā)伊始就采用了CSP并發(fā)模式, 以進(jìn)程為單位,進(jìn)程間沒(méi)有共享內(nèi)存,變量不可變的實(shí)現(xiàn)方式保證了無(wú)鎖的并發(fā)模型,因此也是異常高效的,換句話(huà)說(shuō):你只要像平常一樣寫(xiě)代碼就能并發(fā),完全不用操心任何底層實(shí)現(xiàn),你的代碼能完美的并行運(yùn)行在多核服務(wù)器上,如果你能寫(xiě)出漂亮的并發(fā)級(jí)別的算法和代碼(盡量少的順序代碼),那在32核機(jī)器上就能跑出32倍性能?。。?! Go 語(yǔ)言的并發(fā)模型也是取經(jīng)于Erlang,但是我認(rèn)為Erlang的并發(fā)模型更優(yōu)秀,因?yàn)檫M(jìn)程間完全沒(méi)有共享內(nèi)存,完全無(wú)鎖。
3、由于Erlang和Go都是非常棒的語(yǔ)言,這里就出現(xiàn)一個(gè)問(wèn)題:二選其一還是物盡其用?經(jīng)過(guò)深思熟慮后,我和團(tuán)隊(duì)選擇了后者。
個(gè)人建議學(xué)習(xí)Golang,主要原因如下:
Erlang的硬傷在于代碼的可讀性、表現(xiàn)力。為什么說(shuō)是硬傷? 因?yàn)閷?duì)一門(mén)語(yǔ)言來(lái)說(shuō),語(yǔ)法是不大可能會(huì)大幅度變更的, 而且不會(huì)出現(xiàn)大的變化;
Erlang的軟肋在于高質(zhì)量的庫(kù)少。盡管有不少殺手級(jí)應(yīng)用, 同樣Go在這方面也是軟肋, 這一點(diǎn)對(duì)于一個(gè)不到五年的語(yǔ)言有情可原, 但對(duì)于一個(gè)20多年的語(yǔ)言是不是有點(diǎn)說(shuō)不過(guò)去;
Erlang不合群。 這主要體現(xiàn)在跟其他語(yǔ)言的交互性上, 當(dāng)然這也有深層次的原因, Erlang本身有自己的哲學(xué), 如出錯(cuò)恢復(fù)機(jī)制, 你融入一個(gè)其他語(yǔ)言的東西進(jìn)去, 這帳就不好算,就好比你硬要讓一個(gè)喝咖啡的跟一個(gè)吃大蒜的坐在一起, 總之你寫(xiě)一個(gè)Erlang的port遠(yuǎn)遠(yuǎn)比Go復(fù)雜, 甚至比Python/Java還要復(fù)雜, 這就造成了Erlang在底層編程上效果不是很好, 沒(méi)法利用linux已有的很多優(yōu)秀成果,我一直認(rèn)為Erlang的什么的mysql/pg/oracle驅(qū)動(dòng)都沒(méi)有必要存在, Erlang一定是一個(gè)self-container應(yīng)用, 你只要用到了其他東西, 根據(jù)木桶理論, 你就不敢號(hào)稱(chēng)9個(gè)9,以系統(tǒng)的眼光看問(wèn)題, 我覺(jué)得一個(gè)系統(tǒng)的魯棒性不能依賴(lài)于某一組件, 這也是為什么愛(ài)立信本身的Erlang應(yīng)用并不廣泛;
Erlang的的報(bào)錯(cuò)信息太讓人糾結(jié)了。在Erlang中一切都是并行的, 所以它根本不care是物理哪一行出錯(cuò), 只跟Actor綁定, 然后告訴你Actor的ID和出錯(cuò)代號(hào)。這一點(diǎn)Golang就做了很好的折中, 不需要并行的時(shí)候你老老實(shí)實(shí)的寫(xiě)串行代碼, 需要并行的時(shí)候也有較復(fù)雜的機(jī)制來(lái)應(yīng)對(duì), 合乎情理。