基本設(shè)計(jì)思路:
站在用戶的角度思考問題,與客戶深入溝通,找到沙依巴克網(wǎng)站設(shè)計(jì)與沙依巴克網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋沙依巴克地區(qū)。
類型轉(zhuǎn)換、類型斷言、動態(tài)派發(fā)。iface,eface。
反射對象具有的方法:
編譯優(yōu)化:
內(nèi)部實(shí)現(xiàn):
實(shí)現(xiàn) Context 接口有以下幾個類型(空實(shí)現(xiàn)就忽略了):
互斥鎖的控制邏輯:
設(shè)計(jì)思路:
(以上為寫被讀阻塞,下面是讀被寫阻塞)
總結(jié),讀寫鎖的設(shè)計(jì)還是非常巧妙的:
設(shè)計(jì)思路:
WaitGroup 有三個暴露的函數(shù):
部件:
設(shè)計(jì)思路:
結(jié)構(gòu):
Once 只暴露了一個方法:
實(shí)現(xiàn):
三個關(guān)鍵點(diǎn):
細(xì)節(jié):
讓多協(xié)程任務(wù)的開始執(zhí)行時間可控(按順序或歸一)。(Context 是控制結(jié)束時間)
設(shè)計(jì)思路: 通過一個鎖和內(nèi)置的 notifyList 隊(duì)列實(shí)現(xiàn),Wait() 會生成票據(jù),并將等待協(xié)程信息加入鏈表中,等待控制協(xié)程中發(fā)送信號通知一個(Signal())或所有(Boardcast())等待者(內(nèi)部實(shí)現(xiàn)是通過票據(jù)通知的)來控制協(xié)程解除阻塞。
暴露四個函數(shù):
實(shí)現(xiàn)細(xì)節(jié):
部件:
包: golang.org/x/sync/errgroup
作用:開啟 func() error 函數(shù)簽名的協(xié)程,在同 Group 下協(xié)程并發(fā)執(zhí)行過程并收集首次 err 錯誤。通過 Context 的傳入,還可以控制在首次 err 出現(xiàn)時就終止組內(nèi)各協(xié)程。
設(shè)計(jì)思路:
結(jié)構(gòu):
暴露的方法:
實(shí)現(xiàn)細(xì)節(jié):
注意問題:
包: "golang.org/x/sync/semaphore"
作用:排隊(duì)借資源(如錢,有借有還)的一種場景。此包相當(dāng)于對底層信號量的一種暴露。
設(shè)計(jì)思路:有一定數(shù)量的資源 Weight,每一個 waiter 攜帶一個 channel 和要借的數(shù)量 n。通過隊(duì)列排隊(duì)執(zhí)行借貸。
結(jié)構(gòu):
暴露方法:
細(xì)節(jié):
部件:
細(xì)節(jié):
包: "golang.org/x/sync/singleflight"
作用:防擊穿。瞬時的相同請求只調(diào)用一次,response 被所有相同請求共享。
設(shè)計(jì)思路:按請求的 key 分組(一個 *call 是一個組,用 map 映射存儲組),每個組只進(jìn)行一次訪問,組內(nèi)每個協(xié)程會獲得對應(yīng)結(jié)果的一個拷貝。
結(jié)構(gòu):
邏輯:
細(xì)節(jié):
部件:
如有錯誤,請批評指正。
參考:
Goroutine并發(fā)調(diào)度模型深度解析手?jǐn)]一個協(xié)程池
Golang 的 goroutine 是如何實(shí)現(xiàn)的?
Golang - 調(diào)度剖析【第二部分】
OS線程初始棧為2MB。Go語言中,每個goroutine采用動態(tài)擴(kuò)容方式,初始2KB,按需增長,最大1G。此外GC會收縮??臻g。
BTW,增長擴(kuò)容都是有代價(jià)的,需要copy數(shù)據(jù)到新的stack,所以初始2KB可能有些性能問題。
更多關(guān)于stack的內(nèi)容,可以參見大佬的文章。 聊一聊goroutine stack
用戶線程的調(diào)度以及生命周期管理都是用戶層面,Go語言自己實(shí)現(xiàn)的,不借助OS系統(tǒng)調(diào)用,減少系統(tǒng)資源消耗。
Go語言采用兩級線程模型,即用戶線程與內(nèi)核線程KSE(kernel scheduling entity)是M:N的。最終goroutine還是會交給OS線程執(zhí)行,但是需要一個中介,提供上下文。這就是G-M-P模型
Go調(diào)度器有兩個不同的運(yùn)行隊(duì)列:
go1.10\src\runtime\runtime2.go
Go調(diào)度器根據(jù)事件進(jìn)行上下文切換。
調(diào)度的目的就是防止M堵塞,空閑,系統(tǒng)進(jìn)程切換。
詳見 Golang - 調(diào)度剖析【第二部分】
Linux可以通過epoll實(shí)現(xiàn)網(wǎng)絡(luò)調(diào)用,統(tǒng)稱網(wǎng)絡(luò)輪詢器N(Net Poller)。
文件IO操作
上面都是防止M堵塞,任務(wù)竊取是防止M空閑
每個M都有一個特殊的G,g0。用于執(zhí)行調(diào)度,gc,棧管理等任務(wù),所以g0的棧稱為調(diào)度棧。g0的棧不會自動增長,不會被gc,來自os線程的棧。
go1.10\src\runtime\proc.go
G沒辦法自己運(yùn)行,必須通過M運(yùn)行
M通過通過調(diào)度,執(zhí)行G
從M掛載P的runq中找到G,執(zhí)行G
《Go 語言程序設(shè)計(jì)》(Mark Summerfield)電子書網(wǎng)盤下載免費(fèi)在線閱讀
資源鏈接:
鏈接:
提取碼: kh78 ?
書名:Go 語言程序設(shè)計(jì)
作者:Mark Summerfield
譯者:許式偉
豆瓣評分:6.9
出版社:人民郵電出版社
出版年份:2013-8-1
頁數(shù):354
內(nèi)容簡介:
國外最經(jīng)典的Go語言著作,Go語言編程的先驅(qū)者M(jìn)ark Summerfield的實(shí)踐經(jīng)驗(yàn)總結(jié)。
這是一本Go語言實(shí)戰(zhàn)指南,幫你了解Go語言,按Go語言的方式思考,以及使用Go語言來編寫高性能軟件。
作者展示了如何編寫充分利用Go語言突破性的特性和慣用法的代碼,以及Go語言在其他語言之上所做的改進(jìn),并著重強(qiáng)調(diào)了Go語言的關(guān)鍵創(chuàng)新。
注重實(shí)踐教學(xué),每章都提供了多個經(jīng)過精心設(shè)計(jì)的代碼示例。
由國內(nèi)第一個核心服務(wù)完全采用Go語言實(shí)現(xiàn)的團(tuán)隊(duì)——七牛團(tuán)隊(duì)核心成員翻譯。
作者簡介:
Mark Summerfield Qtrac公司創(chuàng)始人,獨(dú)立的培訓(xùn)講師、顧問、技術(shù)編輯,Go、Python、C++、Qt和PyQt方面的技術(shù)作家。他的著作包括Rapid GUI Programming with Python and Qt、C++ GUI Programming with Qt 4(與Jasmin Blanchette合著)、Programming in Python 3和Advanced Qt Programming等。
許式偉——七牛云存儲CEO,開源愛好者,發(fā)布過十余個C++開源項(xiàng)目,擁有超過15年的C/C++開發(fā)經(jīng)驗(yàn)。
呂桂華——七牛云存儲聯(lián)合創(chuàng)始人,擁有十余年的C/C++大型項(xiàng)目開發(fā)經(jīng)驗(yàn),也曾在Java和.NET平臺上探索多年。
徐 立——七牛云存儲首席布道師,前盛大創(chuàng)新院高級研究員。
何李石——七牛云存儲布道師。
七牛云存儲技術(shù)團(tuán)隊(duì)是國內(nèi)第一個核心服務(wù)完全采用Go語言實(shí)現(xiàn)的團(tuán)隊(duì)。
文章題目:go語言四十二章第五章 go語言42章經(jīng)
轉(zhuǎn)載來源:http://chinadenli.net/article48/hgsshp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、外貿(mào)網(wǎng)站建設(shè)、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、微信小程序、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)