国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Go語言并發(fā)模式視角思考

這篇具有很好參考價(jià)值的文章主要介紹了Go語言并發(fā)模式視角思考。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Go語言并發(fā)模式視角思考,每周一更,golang,開發(fā)語言,后端

猶記得2019年中旬進(jìn)行知識(shí)點(diǎn)的學(xué)習(xí)和demo的練習(xí),熟悉各種語法和并發(fā)調(diào)度的場(chǎng)景,
在2019年末開始參與項(xiàng)目實(shí)戰(zhàn)開發(fā)和邏輯梳理

Go語言的接觸也是更多探索和業(yè)務(wù)的拆件,做一些雛形工具,來慢慢的孵化業(yè)務(wù)生態(tài)

后來陸陸續(xù)續(xù),在主營(yíng)業(yè)務(wù)是PHP的情況下,盡量在業(yè)務(wù)腳本的傾向上使用Go語言,雖然前期兩種語言的混合使用,總會(huì)導(dǎo)致寫法沖突,但好在這個(gè)磨合期平穩(wěn)度過。

后來也會(huì)將公司更多的業(yè)務(wù)傾向于Go來進(jìn)行處理,比如新項(xiàng)目,或者老項(xiàng)目對(duì)并發(fā)要求高的項(xiàng)目會(huì)優(yōu)先考慮。
羅列下Go語言的特點(diǎn):

Go主要有靜態(tài)語言、天生并發(fā)、內(nèi)置GC、安全性高、語法簡(jiǎn)單、交叉編譯和編譯快速這幾個(gè)方面的特性。
這些特性決定了Go的三個(gè)高富帥特性:運(yùn)行快、開發(fā)快和部署快,而這些特性都是針對(duì)Google遇到的一些痛點(diǎn)來設(shè)計(jì)的。

優(yōu)勢(shì)

  • Go天生的自帶并發(fā)調(diào)度,如協(xié)程和通道,且協(xié)程內(nèi)存占用少,一個(gè)Goroutine??臻g最小2K
  • Go自帶的格式統(tǒng)一,gofmt工具
  • Go語法的簡(jiǎn)潔,可讀性強(qiáng),嚴(yán)格語言規(guī)范
  • Go作為靜態(tài)語言,編譯效率高,性能相對(duì)高
  • Go跨平臺(tái)的編譯使用,跟操作shell命令一樣的調(diào)用,部署方便,目前很多腳本都是這么來做的。
  • 豐富的內(nèi)置類型,內(nèi)置強(qiáng)大的工具
  • 內(nèi)置runtime,自動(dòng)垃圾回收機(jī)制

不足

  • 錯(cuò)誤處理,會(huì)有錯(cuò)誤難獲取
  • 基于github獲取代碼庫,會(huì)存在有代碼庫下架問題

Go適合做什么

  • 服務(wù)器編程,如:處理日志,數(shù)據(jù)打包,虛擬機(jī)處理,文件系統(tǒng)
  • 分布式系統(tǒng),數(shù)據(jù)庫代理器
  • 網(wǎng)絡(luò)編程,如:Web應(yīng)用、API應(yīng)用、下載應(yīng)用
  • 內(nèi)存數(shù)據(jù)庫
  • 云平臺(tái),Docker,Kubernetes等應(yīng)用開發(fā)

GO語言的關(guān)鍵特性主要包括以下幾方面:

  • 并發(fā)與協(xié)程
  • 基于消息傳遞的通信方式
  • 豐富實(shí)用的內(nèi)置數(shù)據(jù)類型
  • 函數(shù)多返回值
  • defer機(jī)制
  • 反射(reflect)
  • 高性能HTTP Server
  • 工程管理
  • 編程規(guī)范

Go成功的項(xiàng)目

  • Go成功的項(xiàng)目nsq:bitly開源的消息隊(duì)列系統(tǒng),性能非常高,目前他們每天處理數(shù)十億條的消息
  • docker:基于lxc的一個(gè)虛擬打包工具,能夠?qū)崿F(xiàn)PAAS平臺(tái)的組建。
  • packer:用來生成不同平臺(tái)的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者
  • skynet:分布式調(diào)度框架
  • Doozer:分布式同步工具,類似ZooKeeper
  • Heka:mazila開源的日志處理系統(tǒng)
  • cbfs:couchbase開源的分布式文件系統(tǒng)
  • tsuru:開源的PAAS平臺(tái),和SAE實(shí)現(xiàn)的功能一模一樣
  • groupcache:memcahe作者寫的用于Google下載系統(tǒng)的緩存系統(tǒng)
  • god:類似redis的緩存系統(tǒng),但是支持分布式和擴(kuò)展性
  • gor:網(wǎng)絡(luò)流量抓包和重放工具

碼云上項(xiàng)目

  • 1、項(xiàng)目名稱:基于 Go 實(shí)現(xiàn)的高性能代理服務(wù)器,項(xiàng)目地址:https://gitee.com/snail/proxy
  • 2、項(xiàng)目名稱:基于 Go 實(shí)現(xiàn)的 Git 服務(wù),項(xiàng)目地址:https://gitee.com/Unknown/gogs
  • 3、項(xiàng)目名稱:基于 Go 開發(fā)的開源文庫系統(tǒng),項(xiàng)目地址:https://gitee.com/truthhun/DocHub
  • 4、項(xiàng)目名稱:基于 Go 實(shí)現(xiàn)的內(nèi)網(wǎng)穿透 ,項(xiàng)目地址:https://gitee.com/wapai/chuantou
  • 5、項(xiàng)目名稱:基于 Go 實(shí)現(xiàn)的 Web 開發(fā)框架,項(xiàng)目地址:https://gitee.com/johng/gf
  • 6、項(xiàng)目名稱:基于 Go 實(shí)現(xiàn)的高性能爬蟲,基于go_spider開發(fā)

接下來介紹下關(guān)于Go的并發(fā)相關(guān)的內(nèi)容

Go 調(diào)度器實(shí)現(xiàn)機(jī)制

Go 調(diào)度器模型我們通常叫做G-P-M 模型,他包括 4 個(gè)重要結(jié)構(gòu),分別是G、P、M、Sched:

G:Goroutine,每個(gè) Goroutine 對(duì)應(yīng)一個(gè) G 結(jié)構(gòu)體,G 存儲(chǔ) Goroutine 的運(yùn)行堆棧、狀態(tài)以及任務(wù)函數(shù),可重用。
G 并非執(zhí)行體,每個(gè) G 需要綁定到 P 才能被調(diào)度執(zhí)行。

P: Processor,表示邏輯處理器,對(duì) G 來說,P 相當(dāng)于 CPU 核,G 只有綁定到 P 才能被調(diào)度。
對(duì) M 來說,P 提供了相關(guān)的執(zhí)行環(huán)境(Context),如內(nèi)存分配狀態(tài)(mcache),任務(wù)隊(duì)列(G)等。
P 的數(shù)量決定了系統(tǒng)內(nèi)最大可并行的 G 的數(shù)量(前提:物理 CPU 核數(shù) >= P 的數(shù)量)。
P 的數(shù)量由用戶設(shè)置的 GoMAXPROCS 決定,但是不論 GoMAXPROCS 設(shè)置為多大,P 的數(shù)量最大為 256。

M: Machine,OS 內(nèi)核線程抽象,代表著真正執(zhí)行計(jì)算的資源,在綁定有效的 P 后,進(jìn)入 schedule 循環(huán);
而 schedule 循環(huán)的機(jī)制大致是從 Global 隊(duì)列、P 的 Local 隊(duì)列以及 wait 隊(duì)列中獲取。
M 的數(shù)量是不定的,由 Go Runtime 調(diào)整,為了防止創(chuàng)建過多 OS 線程導(dǎo)致系統(tǒng)調(diào)度不過來,目前默認(rèn)最大限制為 10000 個(gè)。
M 并不保留 G 狀態(tài),這是 G 可以跨 M 調(diào)度的基礎(chǔ)。

Sched:Go 調(diào)度器,它維護(hù)有存儲(chǔ) M 和 G 的隊(duì)列以及調(diào)度器的一些狀態(tài)信息等。
調(diào)度器循環(huán)的機(jī)制大致是從各種隊(duì)列、P 的本地隊(duì)列中獲取 G,切換到 G 的執(zhí)行棧上并執(zhí)行 G 的函數(shù),調(diào)用 Goexit 做清理工作并回到 M,如此反復(fù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-811366.html

到了這里,關(guān)于Go語言并發(fā)模式視角思考的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 每周一算法:二維前綴和

    每周一算法:二維前綴和

    對(duì)一個(gè)序列預(yù)處理得到前綴和數(shù)組,可以在 O ( 1 ) O(1) O ( 1 ) 的時(shí)間復(fù)雜度計(jì)算序列中任意區(qū)間的元素之和,這是前綴和算法的作用。而二維前綴和是用來優(yōu)化處理子矩陣的和。 例如,對(duì)于矩陣 A = [ 1 4 5 2 9 5 2 1 6 9 8 3 4 2 1 6 ] A=left[ begin{matrix}1 4 5 2\\\\ 9 5 2 1 \\\\ 6 9 8 3 \\\\ 4 2 1 6en

    2024年02月06日
    瀏覽(25)
  • 每周一算法:數(shù)獨(dú)游戲

    每周一算法:數(shù)獨(dú)游戲

    數(shù)獨(dú)游戲 數(shù)獨(dú)是根據(jù) 9 × 9 9 times 9 9 × 9 盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個(gè)粗線宮內(nèi)的數(shù)字均含 1 ? 9 1 - 9 1 ? 9 ,不重復(fù)。每一道合格的數(shù)獨(dú)謎題都有且僅有唯一答案,推理方法也以此為基礎(chǔ),任何無解或多解的題目都是不合

    2024年01月19日
    瀏覽(29)
  • 每周一算法:A*(A Star)算法

    每周一算法:A*(A Star)算法

    在 3 × 3 3times 3 3 × 3 的棋盤上,擺有八個(gè)棋子,每個(gè)棋子上標(biāo)有 1 1 1 至 8 8 8 的某一數(shù)字。棋盤中留有一個(gè)空格,空格用 0 0 0 來表示。空格周圍的棋子可以移到空格中。要求解的問題是:給出一種初始布局(初始狀態(tài))和目標(biāo)布局(為了使題目簡(jiǎn)單,設(shè)目標(biāo)狀態(tài)為 123804765 12

    2024年03月15日
    瀏覽(27)
  • 每周一算法:倍增法求區(qū)間最大最小值(RMQ)

    每周一算法:倍增法求區(qū)間最大最小值(RMQ)

    RMQ 是英文 Range Maximum/Minimum Query 的縮寫,表示區(qū)間最大(最小)值。使用倍增思想解決 RMQ 問題的方法是 ST 表(Sparse Table, 稀疏表 )。ST 表是用于解決 可重復(fù)貢獻(xiàn)問題 的數(shù)據(jù)結(jié)構(gòu)。 可重復(fù)貢獻(xiàn)問題 是指對(duì)于運(yùn)算 opt ? operatorname{opt} opt ,滿足 x opt ? x = x xoperatorname{opt}

    2024年02月02日
    瀏覽(31)
  • [每周一更]-(第69期):特殊及面試的GIT問題解析

    [每周一更]-(第69期):特殊及面試的GIT問題解析

    整合代碼使用過程的問題,以及面試遇到的細(xì)節(jié),匯總一些常用命令的對(duì)比解釋和對(duì)比; 1、fetch和pull區(qū)別 git fetch是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉到本地,用戶在檢查了以后決定是否合并到工作本機(jī)分支中。 git pull則是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉下來后直接合并,即:git pull = git

    2024年02月08日
    瀏覽(26)
  • [每周一更]-(第27期):HTTP壓測(cè)工具之wrk

    [每周一更]-(第27期):HTTP壓測(cè)工具之wrk

    [補(bǔ)充完善往期內(nèi)容] wrk是一款簡(jiǎn)單的HTTP壓測(cè)工具,托管在Github上,https://github.com/wg/wrk wrk 的一個(gè)很好的特性就是能用很少的線程壓出很大的并發(fā)量. 原因是它使用了一些操作系統(tǒng)特定的高性能 io 機(jī)制, 比如 select, epoll, kqueue 等. 其實(shí)它是復(fù)用了 redis 的 ae 異步事件驅(qū)動(dòng)框架. 確切的

    2024年02月03日
    瀏覽(28)
  • 每周一算法:高精度乘法(二)大整數(shù)乘大整數(shù)

    每周一算法:高精度乘法(二)大整數(shù)乘大整數(shù)

    高精度乘法是采用模擬算法對(duì)上百位甚至更多位的數(shù)字進(jìn)行乘法運(yùn)算。具體應(yīng)用時(shí)一般分為兩類: 大整數(shù)數(shù)乘整數(shù) 大整數(shù)乘大整數(shù) 大整數(shù)乘大整數(shù)的基本思想是模擬豎式計(jì)中算多位數(shù)乘多位數(shù),一般分為下面幾步: 將乘數(shù) A A A 的每一位 A i A_i A i ? 分別與乘數(shù) B B B 的每一

    2023年04月14日
    瀏覽(94)
  • [每周一更]-(第45期):Docker私有鏡像倉(cāng)庫配置并打通阿里云OSS

    [每周一更]-(第45期):Docker私有鏡像倉(cāng)庫配置并打通阿里云OSS

    Docker Registry 2 官方鏡像創(chuàng)建一個(gè)私有鏡像倉(cāng)庫,將Docker 鏡像上傳到 OSS 相應(yīng)的路徑中。 參考: BatchCompute Docker支持:https://help.aliyun.com/document_detail/143334.html?spm=a2c4g.143333.0.0.4a6f8752ls18FR Docker Registry:https://docs.docker.com/registry 基于OSS搭建私有 Docker Registry:https://developer.aliyun.com

    2024年02月03日
    瀏覽(21)
  • 掌握Go類型內(nèi)嵌:設(shè)計(jì)模式與架構(gòu)的新視角

    掌握Go類型內(nèi)嵌:設(shè)計(jì)模式與架構(gòu)的新視角

    本文深入探討了Go語言中的類型內(nèi)嵌特性,從基礎(chǔ)概念到實(shí)際應(yīng)用,以及相關(guān)的最佳實(shí)踐。文章不僅講解了如何在Go中實(shí)現(xiàn)和使用類型內(nèi)嵌,還通過具體的代碼示例展示了其應(yīng)用場(chǎng)景和潛在陷阱。最后,文章總結(jié)了類型內(nèi)嵌在代碼設(shè)計(jì)中的價(jià)值,并提出了一些獨(dú)特的洞見。 關(guān)

    2024年02月08日
    瀏覽(24)
  • 掌握Go并發(fā):Go語言并發(fā)編程深度解析

    掌握Go并發(fā):Go語言并發(fā)編程深度解析

    ??? 個(gè)人主頁 :鼠鼠我捏,要死了捏的主頁? ??? 系列專欄 :Golang全棧-專欄 ??? 個(gè)人學(xué)習(xí)筆記,若有缺誤,歡迎評(píng)論區(qū)指正 ? 前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站AI學(xué)習(xí)網(wǎng)站。 當(dāng)我們開發(fā)一個(gè)W

    2024年02月20日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包