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

go語(yǔ)言中ch用法 go語(yǔ)言%v

Golang實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者

packagemain

銅梁ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

import(

"fmt"

"sync"

)

//實(shí)現(xiàn)一個(gè)生產(chǎn)者和消費(fèi)者

/*生產(chǎn)者產(chǎn)生數(shù)據(jù)添加到通道里面,消費(fèi)者消費(fèi)數(shù)據(jù)從通道里面

不帶緩存實(shí)現(xiàn)

*/

funcmain(){

ch:=make(chanint)

varwgsync.WaitGroup

wg.Add(2)

goproducers(wg,ch)

goconsumer(wg,ch)

wg.Wait()

}

//生產(chǎn)者

funcproducers(wg*sync.WaitGroup,chchanint){

fori:=0;i10;i++{

fmt.Println("send:",i)

ch-i

}

close(ch)

wg.Done()

}

//消費(fèi)者

funcconsumer(wg*sync.WaitGroup,chchanint){

forv:=rangech{

fmt.Println("recv:",v)

}

wg.Done()

}

???$?

go語(yǔ)言中channel的問題

第一個(gè)問題,打開文件應(yīng)添加"|os.O_WRONLY"

file, err := os.OpenFile("data.dat",os.O_CREATE|os.O_APPEND|os.O_WRONLY,0777)

第二個(gè)問題,將Count方法中的 "ch-i"放到方法的最后一行就可以了。

因?yàn)橐坏癱h-i"執(zhí)行了,main方法中的 "-ch"就會(huì)執(zhí)行通過當(dāng)所有的"-ch"執(zhí)行完后程序就結(jié)束了。但這時(shí)Count的線程方法還來不及執(zhí)行完(打開文件的速度相對(duì)較慢),所以僅僅執(zhí)行一次文件操作就結(jié)束了

Go語(yǔ)言中怎樣判斷數(shù)據(jù)類型

一般來說,我們不會(huì)直接使用ASCII碼來處理,因?yàn)檫@樣不夠直觀。比如你說的判定輸入是否是字母,是否是數(shù)字,那么有個(gè)比較直觀的方法來處理。如果你看過ASCII碼表,那么你就知道字?jǐn)?shù)和字母在ASCII碼表中都是連續(xù)的,所以這個(gè)就比較好解決了。

判定字符ch是否是數(shù)字:

if(ch='0' ch='9')

判定字符ch是否是字母:

if(ch='a' ch='z' || ch='A' ch='Z')

當(dāng)然,有已經(jīng)定義好的庫(kù)函數(shù)用來判定是否數(shù)字和字母,不要加加載頭文件ctype.h

判定字符ch是否是數(shù)字:

if(isalnum(ch));

判定字符ch是否是字母:

if(isalpha(ch));

這兩個(gè)函數(shù)都是判定成立,結(jié)果是true也就是1,判定不成立,結(jié)果是false,也就是0.

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

Hello,大家好,又見面了!上一遍我們將 channel 相關(guān)基礎(chǔ)以及使用場(chǎng)景。這一篇,還需要再次進(jìn)階理解channel 阻塞問題。以下創(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ù)超過指定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里面。

通過如下源碼,你會(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ù),可是沒有數(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)出來,因?yàn)楝F(xiàn)在G2已經(jīng)被阻塞了嘛,會(huì)把G2給G,然后將 t := -ch 中變量 t 是在棧上的地址,放進(jìn)去 elem ,也就是說,只存它的地址指針在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 本來就是已經(jīng)阻塞了,然后我們直接這么干肯定沒有什么毛病,而且效率提高了,不需要再次放入buf再取出,這個(gè)過程也是需要時(shí)間。不然,不得往chan添加數(shù)據(jù)需要加鎖、拷貝、解鎖一序列操作,那肯定就慢了,我想Go語(yǔ)言是為了高效及內(nèi)存使用率的考慮這樣設(shè)計(jì)的。(注意,一般都是在runtime里面完成,不然會(huì)出現(xiàn)象安全問題。)

總結(jié) :

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

相關(guān)面試題:

本文名稱:go語(yǔ)言中ch用法 go語(yǔ)言%v
URL地址:http://jinyejixie.com/article6/dosgoog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)、商城網(wǎng)站、云服務(wù)器

廣告

聲明:本網(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ì)
延川县| 方正县| 祁阳县| 苏尼特左旗| 页游| 敦煌市| 温宿县| 汨罗市| 射洪县| 巩义市| 汝州市| 临猗县| 林芝县| 牡丹江市| 湟源县| 天台县| 日土县| 嘉善县| 利川市| 平陆县| 定远县| 毕节市| 安西县| 永登县| 扶风县| 宜兰市| 长阳| 腾冲县| 广安市| 蕉岭县| 大悟县| 邹城市| 县级市| 邵阳县| 巴彦县| 斗六市| 泸溪县| 五河县| 耿马| 清新县| 马边|