成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Go語(yǔ)言釋放cpu指令 go 調(diào)用系統(tǒng)命令

232.【go 語(yǔ)言】PProf 的使用——CPU和內(nèi)存占用分析(二)

項(xiàng)目更目錄下執(zhí)行 go tool pprof ,結(jié)束之后會(huì)默認(rèn)進(jìn)入 PProf 的命令行交互模式,接著輸入 top 10 ,如下圖,

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)河津免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過(guò)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

項(xiàng)目根目錄下執(zhí)行 go tool pprof ,結(jié)束之后會(huì)默認(rèn)進(jìn)入 PProf 的命令行交互模式,接著輸入 top ,如圖所示,

上面可以看到, main.main.fun1 的 cum 大小正好等于自身的 flat 大小加上 main.Add 大小的 flat 大小

Go并發(fā)編程之美-CAS操作

摘要: 一、前言 go語(yǔ)言類似Java JUC包也提供了一些列用于多線程之間進(jìn)行同步的措施,比如低級(jí)的同步措施有 鎖、CAS、原子變量操作類。相比Java來(lái)說(shuō)go提供了獨(dú)特的基于通道的同步措施。本節(jié)我們先來(lái)看看go中CAS操作 二、CAS操作 go中的Cas操作與java中類似,都是借用了CPU提供的原子性指令來(lái)實(shí)現(xiàn)。

go語(yǔ)言類似Java JUC包也提供了一些列用于多線程之間進(jìn)行同步的措施,比如低級(jí)的同步措施有 鎖、CAS、原子變量操作類。相比Java來(lái)說(shuō)go提供了獨(dú)特的基于通道的同步措施。本節(jié)我們先來(lái)看看go中CAS操作

go中的Cas操作與java中類似,都是借用了CPU提供的原子性指令來(lái)實(shí)現(xiàn)。CAS操作修改共享變量時(shí)候不需要對(duì)共享變量加鎖,而是通過(guò)類似樂(lè)觀鎖的方式進(jìn)行檢查,本質(zhì)還是不斷的占用CPU 資源換取加鎖帶來(lái)的開銷(比如上下文切換開銷)。下面一個(gè)例子使用CAS來(lái)實(shí)現(xiàn)計(jì)數(shù)器

go中CAS操作具有原子性,在解決多線程操作共享變量安全上可以有效的減少使用鎖所帶來(lái)的開銷,但是這是使用cpu資源做交換的。

我簡(jiǎn)單列舉了并發(fā)編程的大綱,需要詳細(xì)的私信“555”~~

go test 命令介紹

是 go 語(yǔ)言 自帶 的 測(cè)試 工具,

其中包含的是 兩類 ,

通過(guò) go help test 可以看到 go test 的 使用 說(shuō)明:

go test [-c] [-i] [build flags] [packages] [flags for test binary]

參數(shù)解讀:

-test.v : 是否輸出全部的單元測(cè)試用例(不管成功或者失?。?,默認(rèn)沒(méi)有加上,所以只輸出失敗的單元測(cè)試用例。

-test.run pattern: 只跑哪些單元測(cè)試用例

-test.bench patten: 只跑那些性能測(cè)試用例

-test.benchmem : 是否在性能測(cè)試的時(shí)候輸出內(nèi)存情況

-test.benchtime t : 性能測(cè)試運(yùn)行的時(shí)間,默認(rèn)是1s

-test.cpuprofile cpu.out : 是否輸出cpu性能分析文件

-test.memprofile mem.out : 是否輸出內(nèi)存性能分析文件

-test.blockprofile block.out : 是否輸出內(nèi)部goroutine阻塞的性能分析文件

-test.memprofilerate n : 內(nèi)存性能分析的時(shí)候有一個(gè)分配了多少的時(shí)候才打點(diǎn)記錄的問(wèn)題。這個(gè)參數(shù)就是設(shè)置打點(diǎn)的內(nèi)存分配間隔,也就是profile中一個(gè)sample代表的內(nèi)存大小。默認(rèn)是設(shè)置為512 * 1024的。如果你將它設(shè)置為1,則每分配一個(gè)內(nèi)存塊就會(huì)在profile中有個(gè)打點(diǎn),那么生成的profile的sample就會(huì)非常多。如果你設(shè)置為0,那就是不做打點(diǎn)了。

你可以通過(guò)設(shè)置memprofilerate=1和GOGC=off來(lái)關(guān)閉內(nèi)存回收,并且對(duì)每個(gè)內(nèi)存塊的分配進(jìn)行觀察。

-test.blockprofilerate n: 基本同上,控制的是goroutine阻塞時(shí)候打點(diǎn)的納秒數(shù)。默認(rèn)不設(shè)置就相當(dāng)于-test.blockprofilerate=1,每一納秒都打點(diǎn)記錄一下

-test.parallel n : 性能測(cè)試的程序并行cpu數(shù),默認(rèn)等于GOMAXPROCS。

-test.timeout t : 如果測(cè)試用例運(yùn)行時(shí)間超過(guò)t,則拋出panic

-test.cpu 1,2,4 : 程序運(yùn)行在哪些CPU上面,使用二進(jìn)制的1所在位代表,和nginx的nginx_worker_cpu_affinity是一個(gè)道理

-test.short : 將那些運(yùn)行時(shí)間較長(zhǎng)的測(cè)試用例運(yùn)行時(shí)間縮短

golang協(xié)程調(diào)度模式解密

golang學(xué)習(xí)筆記

頻繁創(chuàng)建線程會(huì)造成不必要的開銷,所以才有了線程池。在線程池中預(yù)先保存一定數(shù)量的線程,新任務(wù)發(fā)布到任務(wù)隊(duì)列,線程池中的線程不斷地從任務(wù)隊(duì)列中取出任務(wù)并執(zhí)行,可以有效的減少創(chuàng)建和銷毀帶來(lái)的開銷。

過(guò)多的線程會(huì)導(dǎo)致爭(zhēng)搶cpu資源,且上下文的切換的開銷變大。而工作在用戶態(tài)的協(xié)程能大大減少上下文切換的開銷。協(xié)程調(diào)度器把可運(yùn)行的協(xié)程逐個(gè)調(diào)度到線程中執(zhí)行,同時(shí)即時(shí)把阻塞的協(xié)程調(diào)度出協(xié)程,從而有效地避免了線程的頻繁切換,達(dá)到了少量線程實(shí)現(xiàn)高并發(fā)的效果。

多個(gè)協(xié)程分享操作系統(tǒng)分給線程的時(shí)間片,從而達(dá)到充分利用CPU的目的,協(xié)程調(diào)度器決定了則決定了協(xié)程運(yùn)行的順序。每個(gè)線程同一時(shí)刻只能運(yùn)行一個(gè)協(xié)程。

go調(diào)度模型包含三個(gè)實(shí)體:

每個(gè)處理器維護(hù)者一個(gè)協(xié)程G的隊(duì)列,處理器依次將協(xié)程G調(diào)度到M中執(zhí)行。

每個(gè)P會(huì)周期性地查看全局隊(duì)列中是否有G待運(yùn)行并將其調(diào)度到M中執(zhí)行,全局隊(duì)列中的G主要來(lái)自系統(tǒng)調(diào)用中恢復(fù)的G.

如果協(xié)程發(fā)起系統(tǒng)調(diào)用,則整個(gè)工作線程M被阻塞,協(xié)程隊(duì)列中的其他協(xié)程都會(huì)阻塞。

一般情況下M的個(gè)數(shù)會(huì)略大于P個(gè)數(shù),多出來(lái)的M將會(huì)在G產(chǎn)生系統(tǒng)調(diào)用時(shí)發(fā)揮作用。與線程池類似,Go也提供M池子。當(dāng)協(xié)程G1發(fā)起系統(tǒng)掉用時(shí),M1會(huì)釋放P,由 M1-P-G1 G2 ... 轉(zhuǎn)變成 M1-G1 , M2會(huì)接管P的其他協(xié)程 M2-P-G2 G3 G4... 。

冗余的M可能來(lái)源于緩存池,也可能是新建的。

當(dāng)G1結(jié)束系統(tǒng)調(diào)用后,根據(jù)M1是否獲取到P,進(jìn)行不用的處理。

多個(gè)處理P維護(hù)隊(duì)列可能不均衡,導(dǎo)致部分處理器非常繁忙,而其余相對(duì)空閑。產(chǎn)生原因是有些協(xié)程自身不斷地派生協(xié)程。

為此Go調(diào)度器提供了工作量竊取策略,當(dāng)某個(gè)處理器P沒(méi)有需要調(diào)度的協(xié)程時(shí),將從其他處理中偷取協(xié)程,每次偷取一半。

搶占式調(diào)度,是指避免某個(gè)協(xié)程長(zhǎng)時(shí)間執(zhí)行,而阻礙其他協(xié)程被調(diào)度的機(jī)制。

調(diào)度器監(jiān)控每個(gè)協(xié)程執(zhí)行時(shí)間,一旦執(zhí)行時(shí)間過(guò)長(zhǎng)且有其他協(xié)程等待,會(huì)把協(xié)程暫停,轉(zhuǎn)而調(diào)度等待的協(xié)程,以達(dá)到類似時(shí)間片輪轉(zhuǎn)的效果。比如for循環(huán)會(huì)一直占用執(zhí)行權(quán)。

在IO密集型應(yīng)用,GOMAXPROCS大小設(shè)置大一些,獲取性能會(huì)更好。

IO密集型會(huì)經(jīng)常發(fā)生系統(tǒng)調(diào)用,會(huì)有一個(gè)新的M啟用或創(chuàng)建,但由于Go調(diào)度器檢測(cè)M到被阻塞有一定延遲。如果P數(shù)量多,則P管理協(xié)程隊(duì)列會(huì)變小。

本文名稱:Go語(yǔ)言釋放cpu指令 go 調(diào)用系統(tǒng)命令
網(wǎng)站URL:http://jinyejixie.com/article48/dodphep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、小程序開發(fā)、App設(shè)計(jì)、定制開發(fā)、用戶體驗(yàn)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
自治县| 宜章县| 龙胜| 河源市| 磴口县| 环江| 阳山县| 和静县| 罗源县| 平定县| 长泰县| 射阳县| 栾川县| 永胜县| 湛江市| 鹤峰县| 江源县| 巴马| 东莞市| 湖口县| 正定县| 兴安县| 莲花县| 腾冲县| 铜山县| 永昌县| 郓城县| 大名县| 丹江口市| 沈阳市| 江安县| 普洱| 海门市| 汤原县| 广饶县| 桐庐县| 阳城县| 都安| 称多县| 大新县| 巴南区|