日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
go語(yǔ)言的設(shè)計(jì)模式 go語(yǔ)言的設(shè)計(jì)模式有哪些

Go語(yǔ)言的優(yōu)勢(shì)有哪些

1. 部署簡(jiǎn)單

成都創(chuàng)新互聯(lián)是專業(yè)的淮陰網(wǎng)站建設(shè)公司,淮陰接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行淮陰網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

Go

編譯生成的是一個(gè)靜態(tài)可執(zhí)行文件,除了glibc外沒(méi)有其他外部依賴。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個(gè)基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫(kù)的依賴關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。

2. 并發(fā)性好

Goroutine和channel使得編寫高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來(lái)的各種問(wèn)題。單個(gè)Go應(yīng)用也能有效的利用多個(gè)CPU核,并行執(zhí)行的性能好。

3. 良好的語(yǔ)言設(shè)計(jì)

從學(xué)術(shù)的角度講Go語(yǔ)言其實(shí)非常平庸,不支持許多高級(jí)的語(yǔ)言特性;但從工程的角度講,Go的設(shè)計(jì)是非常優(yōu)秀的:規(guī)范足夠簡(jiǎn)單靈活,有其他語(yǔ)言基礎(chǔ)的程序員都能迅速上手。更重要的是

Go 自帶完善的工具鏈,大大提高了團(tuán)隊(duì)協(xié)作的一致性。

4. 執(zhí)行性能好

雖然不如 C 和 Java,但相比于其他編程語(yǔ)言,其執(zhí)行性能還是很好的,適合編寫一些瓶頸業(yè)務(wù),內(nèi)存占用也非常省。

Go 語(yǔ)言 channel 的阻塞問(wèn)題

Hello,大家好,又見面了!上一遍我們將 channel 相關(guān)基礎(chǔ)以及使用場(chǎng)景。這一篇,還需要再次進(jìn)階理解channel 阻塞問(wèn)題。以下創(chuàng)建一個(gè)chan類型為int,cap 為3。

channel 內(nèi)部其實(shí)是一個(gè)環(huán)形buf數(shù)據(jù)結(jié)構(gòu) ,是一種滑動(dòng)窗口機(jī)制,當(dāng)make完后,就分配在 Heap 上。

上面,向 chan 發(fā)送一條“hello”數(shù)據(jù):

如果 G1 發(fā)送數(shù)據(jù)超過(guò)指定cap時(shí),會(huì)出現(xiàn)什么情況?

看下面實(shí)例:

以上會(huì)出現(xiàn)什么,chan 緩沖區(qū)允許大小為1,如果再往chan仍數(shù)據(jù),滿了就會(huì)被阻塞,那么是如何實(shí)現(xiàn)阻塞的呢?當(dāng) chan 滿時(shí),會(huì)進(jìn)入 gopark,此時(shí) G1 進(jìn)入一個(gè) waiting 狀態(tài),然后會(huì)創(chuàng)建一個(gè) sudog 對(duì)象,其實(shí)就sendq隊(duì)列,把 200放進(jìn)去。等 buf 不滿的時(shí)候,再喚醒放入buf里面。

通過(guò)如下源碼,你會(huì)更加清晰:

上面,從 chan 獲取數(shù)據(jù):

Go 語(yǔ)言核心思想:“Do not communicate by sharing memory; instead, share memory by communicating.” 你可以看看這本書名叫:Effective Go

如果接收者,接收一個(gè)空對(duì)象,也會(huì)發(fā)生什么情況?

代碼示例 :

也會(huì)報(bào)錯(cuò)如下:

上面,從 chan 取出數(shù)據(jù),可是沒(méi)有數(shù)據(jù)了。此時(shí),它會(huì)把 接收者 G2 阻塞掉,也是和G1發(fā)送者一樣,也會(huì)執(zhí)行 gopark 將狀態(tài)改為 waiting,不一樣的點(diǎn)就是。

正常情況下,接收者G2作為取出數(shù)據(jù)是去 buf 讀取數(shù)據(jù)的,但現(xiàn)在,buf 為空了,此時(shí),接收者G2會(huì)將sudog導(dǎo)出來(lái),因?yàn)楝F(xiàn)在G2已經(jīng)被阻塞了嘛,會(huì)把G2給G,然后將 t := -ch 中變量 t 是在棧上的地址,放進(jìn)去 elem ,也就是說(shuō),只存它的地址指針在sudog里面。

最后, ch - 200 當(dāng)G1往 chan 添加200這個(gè)數(shù)據(jù),正常情況是將數(shù)據(jù)添加到buf里面,然后喚醒 G2 是吧,而現(xiàn)在是將 G1 的添加200數(shù)據(jù)直接干到剛才G2阻塞的t這里變量里面。

你會(huì)認(rèn)為,這樣真的可以嗎?想一想,G2 本來(lái)就是已經(jīng)阻塞了,然后我們直接這么干肯定沒(méi)有什么毛病,而且效率提高了,不需要再次放入buf再取出,這個(gè)過(guò)程也是需要時(shí)間。不然,不得往chan添加數(shù)據(jù)需要加鎖、拷貝、解鎖一序列操作,那肯定就慢了,我想Go語(yǔ)言是為了高效及內(nèi)存使用率的考慮這樣設(shè)計(jì)的。(注意,一般都是在runtime里面完成,不然會(huì)出現(xiàn)象安全問(wèn)題。)

總結(jié) :

chan 類型的特點(diǎn):chan 如果為空,receiver 接收數(shù)據(jù)的時(shí)候就會(huì)阻塞等待,直到 chan 被關(guān)閉或者有新的數(shù)據(jù)到來(lái)。有這種個(gè)機(jī)制,就可以實(shí)現(xiàn) wait/notify 的設(shè)計(jì)模式。

相關(guān)面試題:

為什么要使用 Go 語(yǔ)言?Go 語(yǔ)言的優(yōu)勢(shì)在哪里

1、學(xué)習(xí)曲線

它包含了類C語(yǔ)法、GC內(nèi)置和工程工具。這一點(diǎn)非常重要,因?yàn)镚o語(yǔ)言容易學(xué)習(xí),所以一個(gè)普通的大學(xué)生花一個(gè)星期就能寫出來(lái)可以上手的、高性能的應(yīng)用。在國(guó)內(nèi)大家都追求快,這也是為什么國(guó)內(nèi)Go流行的原因之一。

2、效率

Go擁有接近C的運(yùn)行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。

3、出身名門、血統(tǒng)純正

之所以說(shuō)Go語(yǔ)言出身名門,是因?yàn)槲覀冎繥o語(yǔ)言出自Google公司,這個(gè)公司在業(yè)界的知名度和實(shí)力自然不用多說(shuō)。Google公司聚集了一批牛人,在各種編程語(yǔ)言稱雄爭(zhēng)霸的局面下推出新的編程語(yǔ)言,自然有它的戰(zhàn)略考慮。而且從Go語(yǔ)言的發(fā)展態(tài)勢(shì)來(lái)看,Google對(duì)它這個(gè)新的寵兒還是很看重的,Go自然有一個(gè)良好的發(fā)展前途。我們看看Go語(yǔ)言的主要?jiǎng)?chuàng)造者,血統(tǒng)純正這點(diǎn)就可見端倪了。

4、組合的思想、無(wú)侵入式的接口

Go語(yǔ)言可以說(shuō)是開發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語(yǔ)言支持當(dāng)前所有的編程范式,包括過(guò)程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。

5、強(qiáng)大的標(biāo)準(zhǔn)庫(kù)

這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫(kù)基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個(gè),網(wǎng)絡(luò)層、系統(tǒng)層的庫(kù)非常實(shí)用。

6、部署方便

我相信這一點(diǎn)是很多人選擇Go的最大理由,因?yàn)椴渴鹛奖?,所以現(xiàn)在也有很多人用Go開發(fā)運(yùn)維程序。

7、簡(jiǎn)單的并發(fā)

它包含降低心智的并發(fā)和簡(jiǎn)易的數(shù)據(jù)同步,我覺得這是Go最大的特色。之所以寫正確的并發(fā)、容錯(cuò)和可擴(kuò)展的程序如此之難,是因?yàn)槲覀冇昧隋e(cuò)誤的工具和錯(cuò)誤的抽象,Go可以說(shuō)這一塊做的相當(dāng)簡(jiǎn)單。

8、穩(wěn)定性

Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會(huì)更穩(wěn)定呢?這是因?yàn)镚o提供了軟件生命周期的各個(gè)環(huán)節(jié)的工具,如go

tool、gofmt、go test。


文章名稱:go語(yǔ)言的設(shè)計(jì)模式 go語(yǔ)言的設(shè)計(jì)模式有哪些
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/doossjd.html