欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言內(nèi)存增長(zhǎng),go操作內(nèi)存

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

1、簡(jiǎn)單易學(xué)。

創(chuàng)新互聯(lián)專注于哈巴河網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供哈巴河營(yíng)銷型網(wǎng)站建設(shè),哈巴河網(wǎng)站制作、哈巴河網(wǎng)頁(yè)設(shè)計(jì)、哈巴河網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造哈巴河網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供哈巴河網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

Go語言的作者本身就很懂C語言,所以同樣Go語言也會(huì)有C語言的基因,所以對(duì)于程序員來說,Go語言天生就會(huì)讓人很熟悉,容易上手。

2、并發(fā)性好。

Go語言天生支持并發(fā),可以充分利用多核,輕松地使用并發(fā)。 這是Go語言最大的特點(diǎn)。

描述

Go的語法接近C語言,但對(duì)于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ),采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運(yùn)算的特征,比如通道傳輸。

在1.8版本中開放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動(dòng)態(tài)加載部分函數(shù)。

與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級(jí)支持。

go語言有前景嗎?

就目前來看還是很有前景,因?yàn)樵絹碓交鹆耍贿^他的應(yīng)用領(lǐng)域還是局限在高并發(fā)處理和網(wǎng)站開發(fā),畢竟是后起之秀所以在其他桌面程序領(lǐng)域沒那么容易普及和超越c++,找工作就不推薦學(xué)go

GO語言商業(yè)案例(十六):Curve-

Golang 的創(chuàng)建是為了實(shí)現(xiàn)最大的用戶效率和編碼效率。已經(jīng)熟悉 Java 或 PHP 的程序員可以在幾周內(nèi)接受 Go 的培訓(xùn)(許多人最終會(huì)更喜歡它)。在本文中,Dewet Diener 探討了 Golang 的優(yōu)缺點(diǎn),以及它的測(cè)試驅(qū)動(dòng)開發(fā) (TDD) 如何完美契合。

Golang 由 Google 開發(fā)和設(shè)計(jì),于 2009 年作為一種綜合性編程語言首次出現(xiàn),旨在最大限度地提高編碼效率。創(chuàng)建該語言的目的是修正其他已建立語言的缺陷。盡管 Golang(或簡(jiǎn)稱為“Go”)是一門年輕的語言,但已經(jīng)積累了大量的開發(fā)人員,因此我們想分享為什么在 Curve 我們喜歡 Golang,以及我們?nèi)绾尾捎盟鼇韺?shí)現(xiàn)我們移動(dòng)銀行業(yè)務(wù)的目標(biāo)到云端。

Go 是一種精致的編程語言:它支持“所見即所得”的原則,這意味著清晰易讀的代碼和更少的復(fù)雜抽象。該語言本身易于使用且易于訓(xùn)練。盡管如此,作為一個(gè)相對(duì)較新的生態(tài)系統(tǒng),要找到對(duì) Go 具有廣泛預(yù)先知識(shí)的工程師可能會(huì)很棘手。

然而,與其他編程語言不同,Go 的創(chuàng)建是為了最大限度地提高用戶效率。因此,具有 Java 或 PHP 背景的開發(fā)人員和工程師可以在幾周內(nèi)獲得使用 Go 的技能和培訓(xùn)——根據(jù)我們的經(jīng)驗(yàn),他們中的許多人最終更喜歡它。

在 Curve,我們大力提倡測(cè)試驅(qū)動(dòng)開發(fā) (TDD),Go 的框架與這種方法保持一致。通過簡(jiǎn)單地命名一個(gè)文件 foo_test.go 并在該文件中添加結(jié)構(gòu)化測(cè)試函數(shù),Go 將快速有效地運(yùn)行您的單元測(cè)試。這一創(chuàng)新功能提高了生產(chǎn)力,因?yàn)樗梢愿訉W⒂跍y(cè)試驅(qū)動(dòng)的開發(fā)和改進(jìn)的同行評(píng)審機(jī)會(huì)。

Golang 具有出色的生產(chǎn)優(yōu)化品質(zhì),例如內(nèi)存占用小,這支持其在大型項(xiàng)目中作為構(gòu)建塊的能力,以及開箱即用的與其他架構(gòu)的輕松交叉編譯。由于 Go 代碼被編譯為單個(gè)靜態(tài)二進(jìn)制文件,因此它可以輕松進(jìn)行容器化,并且通過擴(kuò)展,將 Go 部署到任何高可用性環(huán)境(例如 Kubernetes)中幾乎是微不足道的。

它提供了一種機(jī)制來保護(hù)工作負(fù)載,通過擁有非常纖薄的生產(chǎn)容器而沒有任何無關(guān)的依賴項(xiàng)。這使得構(gòu)建、部署和維護(hù)基于 Go 的資產(chǎn)更加直接和安全,并為希望建立或發(fā)展其微服務(wù)戰(zhàn)略的公司提供了可靠的選擇。

Go 是專門為滿足我們快速發(fā)展的技術(shù)生態(tài)系統(tǒng)的需求而創(chuàng)建的。例如,Go 可以滿足您構(gòu)建 API 所需的一切,并將其作為其標(biāo)準(zhǔn)庫(kù)的一部分。它使用簡(jiǎn)單,高性能的 http 服務(wù)器消除了團(tuán)隊(duì)設(shè)計(jì)新項(xiàng)目時(shí)經(jīng)常發(fā)生的一些常見的 探索 和設(shè)計(jì)癱瘓問題——這對(duì)于一些其他流行語言(如 Java 和 Node.js)來說太常見了。

Golang 還通過其內(nèi)置于語言本身的自動(dòng)格式化程序巧妙地解決了代碼格式化分歧。這完全消除了格式爭(zhēng)議,進(jìn)而提高了團(tuán)隊(duì)的生產(chǎn)力和注意力。

盡管我是 Go 的擁護(hù)者,但它顯然也不是沒有缺陷。一個(gè)爭(zhēng)論不休的特性是 Go 沒有顯式接口,這是許多開發(fā)人員習(xí)慣的概念。雖然不是有害的,但它可以使選擇最適合您的結(jié)構(gòu)的接口成為一項(xiàng)任務(wù)。這是因?yàn)槟粫?huì)像在其他流行的編程語言中那樣編寫 X 實(shí)現(xiàn) Y,但您很快就會(huì)接受。

依賴管理也是另一個(gè)不屬于 Google Golang 開發(fā)團(tuán)隊(duì)原始設(shè)計(jì)的功能。開源社區(qū)介入并創(chuàng)建了 Glide 和 Dep,最初的努力并沒有完全解決問題。從 Go 1.11 開始,添加了對(duì)模塊的支持,這似乎已成為官方的依賴管理工具。這些挑戰(zhàn)并沒有削弱 Go 作為一種高效編程語言的獨(dú)創(chuàng)性,并且它繼續(xù)為我們提供優(yōu)于其他編程語言的顯著優(yōu)勢(shì)。

Golang 吸引了全球敏銳的開發(fā)人員的注意,并且圍繞它的興奮繼續(xù)增長(zhǎng)。開源社區(qū)因有趣的項(xiàng)目而蓬勃發(fā)展;最著名的是 Docker 和 Kubernetes。

正是這種新鮮、有創(chuàng)意但又簡(jiǎn)單的包裝吸引了我們?nèi)o:它是一種令人興奮的編碼語言,可以幫助我們?cè)?Curve 中快速開發(fā)以構(gòu)建更好的產(chǎn)品。

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

1. 部署簡(jiǎn)單

Go

編譯生成的是一個(gè)靜態(tài)可執(zhí)行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標(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ī)制以及由此帶來的各種問題。單個(gè)Go應(yīng)用也能有效的利用多個(gè)CPU核,并行執(zhí)行的性能好。

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

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

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

4. 執(zhí)行性能好

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

Go語言中恰到好處的內(nèi)存對(duì)齊

在開始之前,希望你計(jì)算一下 Part1 共占用的大小是多少呢?

輸出結(jié)果:

這么一算, Part1 這一個(gè)結(jié)構(gòu)體的占用內(nèi)存大小為 1+4+1+8+1 = 15 個(gè)字節(jié)。相信有的小伙伴是這么算的,看上去也沒什么毛病

真實(shí)情況是怎么樣的呢?我們實(shí)際調(diào)用看看,如下:

輸出結(jié)果:

最終輸出為占用 32 個(gè)字節(jié)。這與前面所預(yù)期的結(jié)果完全不一樣。這充分地說明了先前的計(jì)算方式是錯(cuò)誤的。為什么呢?

在這里要提到 “內(nèi)存對(duì)齊” 這一概念,才能夠用正確的姿勢(shì)去計(jì)算,接下來我們?cè)敿?xì)的講講它是什么

有的小伙伴可能會(huì)認(rèn)為內(nèi)存讀取,就是一個(gè)簡(jiǎn)單的字節(jié)數(shù)組擺放

上圖表示一個(gè)坑一個(gè)蘿卜的內(nèi)存讀取方式。但實(shí)際上 CPU 并不會(huì)以一個(gè)一個(gè)字節(jié)去讀取和寫入內(nèi)存。相反 CPU 讀取內(nèi)存是 一塊一塊讀取 的,塊的大小可以為 2、4、6、8、16 字節(jié)等大小。塊大小我們稱其為 內(nèi)存訪問粒度 。如下圖:

在樣例中,假設(shè)訪問粒度為 4。 CPU 是以每 4 個(gè)字節(jié)大小的訪問粒度去讀取和寫入內(nèi)存的。這才是正確的姿勢(shì)

另外作為一個(gè)工程師,你也很有必要學(xué)習(xí)這塊知識(shí)點(diǎn)哦 :)

在上圖中,假設(shè)從 Index 1 開始讀取,將會(huì)出現(xiàn)很崩潰的問題。因?yàn)樗膬?nèi)存訪問邊界是不對(duì)齊的。因此 CPU 會(huì)做一些額外的處理工作。如下:

從上述流程可得出,不做 “內(nèi)存對(duì)齊” 是一件有點(diǎn) "麻煩" 的事。因?yàn)樗鼤?huì)增加許多耗費(fèi)時(shí)間的動(dòng)作

而假設(shè)做了內(nèi)存對(duì)齊,從 Index 0 開始讀取 4 個(gè)字節(jié),只需要讀取一次,也不需要額外的運(yùn)算。這顯然高效很多,是標(biāo)準(zhǔn)的 空間換時(shí)間 做法

在不同平臺(tái)上的編譯器都有自己默認(rèn)的 “對(duì)齊系數(shù)”,可通過預(yù)編譯命令 #pragma pack(n) 進(jìn)行變更,n 就是代指 “對(duì)齊系數(shù)”。一般來講,我們常用的平臺(tái)的系數(shù)如下:

另外要注意,不同硬件平臺(tái)占用的大小和對(duì)齊值都可能是不一樣的。因此本文的值不是唯一的,調(diào)試的時(shí)候需按本機(jī)的實(shí)際情況考慮

輸出結(jié)果:

在 Go 中可以調(diào)用 unsafe.Alignof 來返回相應(yīng)類型的對(duì)齊系數(shù)。通過觀察輸出結(jié)果,可得知基本都是 2^n ,最大也不會(huì)超過 8。這是因?yàn)槲沂痔幔?4 位)編譯器默認(rèn)對(duì)齊系數(shù)是 8,因此最大值不會(huì)超過這個(gè)數(shù)

在上小節(jié)中,提到了結(jié)構(gòu)體中的成員變量要做字節(jié)對(duì)齊。那么想當(dāng)然身為最終結(jié)果的結(jié)構(gòu)體,也是需要做字節(jié)對(duì)齊的

接下來我們一起分析一下,“它” 到底經(jīng)歷了些什么,影響了 “預(yù)期” 結(jié)果

在每個(gè)成員變量進(jìn)行對(duì)齊后,根據(jù)規(guī)則 2,整個(gè)結(jié)構(gòu)體本身也要進(jìn)行字節(jié)對(duì)齊,因?yàn)榭砂l(fā)現(xiàn)它可能并不是 2^n ,不是偶數(shù)倍。顯然不符合對(duì)齊的規(guī)則

根據(jù)規(guī)則 2,可得出對(duì)齊值為 8。現(xiàn)在的偏移量為 25,不是 8 的整倍數(shù)。因此確定偏移量為 32。對(duì)結(jié)構(gòu)體進(jìn)行對(duì)齊

Part1 內(nèi)存布局:axxx|bbbb|cxxx|xxxx|dddd|dddd|exxx|xxxx

通過本節(jié)的分析,可得知先前的 “推算” 為什么錯(cuò)誤?

是因?yàn)閷?shí)際內(nèi)存管理并非 “一個(gè)蘿卜一個(gè)坑” 的思想。而是一塊一塊。通過空間換時(shí)間(效率)的思想來完成這塊讀取、寫入。另外也需要兼顧不同平臺(tái)的內(nèi)存操作情況

在上一小節(jié),可得知根據(jù)成員變量的類型不同,其結(jié)構(gòu)體的內(nèi)存會(huì)產(chǎn)生對(duì)齊等動(dòng)作。那假設(shè)字段順序不同,會(huì)不會(huì)有什么變化呢?我們一起來試試吧 :-)

輸出結(jié)果:

通過結(jié)果可以驚喜的發(fā)現(xiàn),只是 “簡(jiǎn)單” 對(duì)成員變量的字段順序進(jìn)行改變,就改變了結(jié)構(gòu)體占用大小

接下來我們一起剖析一下 Part2 ,看看它的內(nèi)部到底和上一位之間有什么區(qū)別,才導(dǎo)致了這樣的結(jié)果?

符合規(guī)則 2,不需要額外對(duì)齊

Part2 內(nèi)存布局:ecax|bbbb|dddd|dddd

通過對(duì)比 Part1 和 Part2 的內(nèi)存布局,你會(huì)發(fā)現(xiàn)兩者有很大的不同。如下:

仔細(xì)一看, Part1 存在許多 Padding。顯然它占據(jù)了不少空間,那么 Padding 是怎么出現(xiàn)的呢?

通過本文的介紹,可得知是由于不同類型導(dǎo)致需要進(jìn)行字節(jié)對(duì)齊,以此保證內(nèi)存的訪問邊界

那么也不難理解,為什么 調(diào)整結(jié)構(gòu)體內(nèi)成員變量的字段順序 就能達(dá)到縮小結(jié)構(gòu)體占用大小的疑問了,是因?yàn)榍擅畹販p少了 Padding 的存在。讓它們更 “緊湊” 了。這一點(diǎn)對(duì)于加深 Go 的內(nèi)存布局印象和大對(duì)象的優(yōu)化非常有幫

go語言適合做什么

go語言適用的領(lǐng)域有:

Go語言主要用作服務(wù)器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長(zhǎng),支持云計(jì)算的網(wǎng)絡(luò)服務(wù)。

Go語言作為服務(wù)器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理等;網(wǎng)絡(luò)編程方面,Go語言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語言還可用于內(nèi)存數(shù)據(jù)庫(kù)和云平臺(tái)領(lǐng)域,目前國(guó)外很多云平臺(tái)都是采用Go開發(fā)。

Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長(zhǎng)過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達(dá)性。

Go語言作為一門大型項(xiàng)目開發(fā)語言,在很多大公司相繼使用,甚至完全轉(zhuǎn)向Go開發(fā),其中代表有Google、Facebook、騰訊、百度、阿里巴巴、京東、小米以及360、美團(tuán)、滴滴以及新浪等,因此,Go語言的開發(fā)前景還是很不錯(cuò)的!

名稱欄目:go語言內(nèi)存增長(zhǎng),go操作內(nèi)存
當(dāng)前鏈接:http://chinadenli.net/article34/dsijgpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司網(wǎng)站排名用戶體驗(yàn)定制網(wǎng)站關(guān)鍵詞優(yōu)化搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)