最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang 協(xié)程配合管道的實(shí)現(xiàn)示例

 更新時(shí)間:2024年01月11日 11:09:35   作者:富士康質(zhì)檢員張全蛋  
本文主要介紹了Golang協(xié)程配合管道的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

請(qǐng)完成goroutine和channel協(xié)同工作的案例,具體要求:
(1)開啟一個(gè)writeData協(xié)程,向管道m(xù)tChan中寫入50個(gè)整數(shù).
(2)開啟一個(gè)readData協(xié)程,從管道intChan中讀取writeData寫入的數(shù)據(jù)。
(3)注意:writeData和readDate操作的是同一個(gè)管道
(4)主線程需要等待writeData和readDate協(xié)程都完成工作才能退出(如果主線程不做處理,那么其他線程還沒干完活就直接跑路了)

管道是引用類型,那么寫入讀取的都是同一個(gè)管道,也就是在不同函數(shù)不同棧里面讀取的都是同一個(gè)管道。兩個(gè)協(xié)程同時(shí)的向管道里面寫入讀取數(shù)據(jù),而不是一個(gè)寫完另外一個(gè)協(xié)程再去讀取。

package main

import (
	"fmt"
)

func writeData(initChan chan int) {
	for i := 0; i <= 50; i++ {
		//放入數(shù)據(jù)
		initChan <- i
		fmt.Println("write data:", i)
	}
	close(initChan)
}
func readData(initChan chan int, exitChan chan bool) {
	//即使管道close之后并不影響讀取,當(dāng)在管道當(dāng)中取不到數(shù)據(jù)才會(huì)退出
	for {
		//在從一個(gè)管道里面讀取會(huì)返回兩個(gè)值,ok是有沒有正確讀取到
		v, ok := <-initChan
		if !ok {
			break
		}
		fmt.Println("read data:", v)
	}
	//readData任務(wù)完成之后
	exitChan <- true
	close(exitChan)
}

func main() {
	//創(chuàng)建兩個(gè)管道
	initChan := make(chan int, 50)
	exitChan := make(chan bool, 1)

	go writeData(initChan)
	go readData(initChan, exitChan)

	for {
		_, ok := <-exitChan
		fmt.Println("ok=", ok)
		if ok {
			break
		}
	}
}

如果給的容量就是50,那么循環(huán)50次就剛好放進(jìn)去了。如果管道和放進(jìn)去的數(shù)據(jù)量不匹配,管道的容量小于放進(jìn)去的數(shù)據(jù),又不取出來,那么它就會(huì)阻塞,就會(huì)死鎖。

這個(gè)管道可以容納的數(shù)據(jù)量很小,要寫的數(shù)據(jù)量很大,只要一邊在寫,另外一邊在讀是無所謂的。

如果寫的快,讀取的慢。那么在寫的時(shí)候就會(huì)阻塞,編譯器會(huì)發(fā)現(xiàn)雖然阻塞了,但是有另外一個(gè)協(xié)程在往里面讀取數(shù)據(jù),這樣就不會(huì)發(fā)生死鎖。

func producer(ch chan int) {
	i := 0
	for {
		ch <- i
		i++
	}
}

func main() {
	ch := make(chan int, 2)
	go producer(ch)

	for {
		fmt.Println(<-ch)
		time.Sleep(time.Second * 2)
	}
}

0
1
2
3
4
5
6
7

進(jìn)程 已完成,退出代碼為 -1073741510 (0xC000013A: interrupted by Ctrl+C)

死鎖編譯器底層會(huì)分析,如果發(fā)現(xiàn)一個(gè)地方在不停的寫,但是沒有任何一個(gè)協(xié)程去讀取這樣就直接死鎖,如果有一個(gè)協(xié)程在慢慢的讀取這樣不會(huì)死鎖。和寫入讀取速度沒有關(guān)系,但是必須有寫入的協(xié)程和讀取的協(xié)程。簡而言之就是管道需要不停的流動(dòng)。

到此這篇關(guān)于Golang 協(xié)程配合管道的文章就介紹到這了,更多相關(guān)Golang 協(xié)程配合管道內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Go語言中泛型的實(shí)現(xiàn)原理與使用

    詳解Go語言中泛型的實(shí)現(xiàn)原理與使用

    本文是對(duì)泛型的基本思想及其在?Go?中的實(shí)現(xiàn)的一個(gè)比較容易理解的介紹,同時(shí)也是對(duì)圍繞泛型的各種性能討論的簡單總結(jié),感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Go+Redis實(shí)現(xiàn)常見限流算法的示例代碼

    Go+Redis實(shí)現(xiàn)常見限流算法的示例代碼

    限流是項(xiàng)目中經(jīng)常需要使用到的一種工具,一般用于限制用戶的請(qǐng)求的頻率,也可以避免瞬間流量過大導(dǎo)致系統(tǒng)崩潰,或者穩(wěn)定消息處理速率。這篇文章主要是使用Go+Redis實(shí)現(xiàn)常見的限流算法,需要的可以參考一下
    2023-04-04
  • Golang應(yīng)用程序性能優(yōu)化技巧分享

    Golang應(yīng)用程序性能優(yōu)化技巧分享

    隨著科技的進(jìn)步,人人都想要快速的應(yīng)用,這就需要優(yōu)化您的應(yīng)用程序性能。本文為大家整理了一些Golang應(yīng)用程序性能優(yōu)化的技巧,希望對(duì)大家有所幫助
    2023-04-04
  • golang高性能的http請(qǐng)求 fasthttp詳解

    golang高性能的http請(qǐng)求 fasthttp詳解

    fasthttp 是 Go 的快速 HTTP 實(shí)現(xiàn),當(dāng)前在 1M 并發(fā)的生產(chǎn)環(huán)境使用非常成功,可以從單個(gè)服務(wù)器進(jìn)行 100K qps 的持續(xù)連接,總而言之,fasthttp 比 net/http 快 10 倍,下面通過本文給大家介紹golang fasthttp http請(qǐng)求的相關(guān)知識(shí),一起看看吧
    2021-09-09
  • Go語言調(diào)用DeepSeek?API實(shí)現(xiàn)流式輸出和對(duì)話

    Go語言調(diào)用DeepSeek?API實(shí)現(xiàn)流式輸出和對(duì)話

    DeepSeek是一個(gè)強(qiáng)大的AI模型服務(wù)平臺(tái),本文將詳細(xì)介紹如何使用Go語言調(diào)用DeepSeek?API實(shí)現(xiàn)流式輸出和對(duì)話功能,感興趣的小伙伴可以了解一下
    2025-02-02
  • Go語言Elasticsearch數(shù)據(jù)清理工具思路詳解

    Go語言Elasticsearch數(shù)據(jù)清理工具思路詳解

    這篇文章主要介紹了Go語言Elasticsearch數(shù)據(jù)清理工具思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Go Comparable Type原理深入解析

    Go Comparable Type原理深入解析

    這篇文章主要為大家介紹了Go Comparable Type原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go語言在Linux環(huán)境下輸出彩色字符的方法

    Go語言在Linux環(huán)境下輸出彩色字符的方法

    這篇文章主要介紹了Go語言在Linux環(huán)境下輸出彩色字符的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Golang時(shí)間處理庫go-carbon?v2.2.13發(fā)布細(xì)則

    Golang時(shí)間處理庫go-carbon?v2.2.13發(fā)布細(xì)則

    這篇文章主要為大家介紹了Golang?時(shí)間處理庫go-carbon?v2.2.13發(fā)布細(xì)則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Go語言單元測(cè)試的實(shí)現(xiàn)及用例

    Go語言單元測(cè)試的實(shí)現(xiàn)及用例

    在日常開發(fā)中,我們通常需要針對(duì)現(xiàn)有的功能進(jìn)行單元測(cè)試,以驗(yàn)證開發(fā)的正確性,本文主要介紹了Go語言單元測(cè)試的實(shí)現(xiàn)及用例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

措美县| 息烽县| 冕宁县| 南部县| 双鸭山市| 桐城市| 白城市| 日照市| 浦江县| 安溪县| 班玛县| 滨海县| 绥阳县| 北海市| 四川省| 东乡县| 上虞市| 祁阳县| 灵石县| 嘉禾县| 平果县| 新宁县| 仲巴县| 汉阴县| 即墨市| 吐鲁番市| 峨眉山市| 淄博市| 罗源县| 邯郸县| 江北区| 章丘市| 安丘市| 全南县| 许昌县| 彭水| 江陵县| 甘肃省| 久治县| 赫章县| 开阳县|