Golang并发编程,3、解决协程紧张局势的方案
如皋娱乐新闻网 2025-09-24
Goroutine是Go并行设计的两大,作为Go中都最基本的可执行两组,goroutine比thread不够易懂、不够高效、不够轻便,耗损内存相对来说寄存器不够小。
用作goroutine的方法是:在子程序同一时间用作关键字go,创设1个比方说勤务两组,也就创设了1个比方说勤务。
什么时候需要用作goroutine?1、业务逻辑需要比方说
2、性能优化需要比方说
有一个情况,应用程序1和应用程序2要用作喇叭配广播电台,那么应用程序1先来,应用程序2后来,来的时候应用程序1正在交谈,那么这个时候应用程序1和应用程序2对喇叭就有了一个纷争。
代码如下:
package mainimport ( "fmt" "time")func Speaker(str1 string) { for _, s := range str1 { c := fmt.Sprintf("%c", s) fmt.Print(c) time.Sleep(time.Second * 1) } fmt.Println()}func User1() { Speaker("现今星期一")}func User2() { Speaker("下雪挺好的")}func main() { go User1() go User2() for { }} 可执行结果找到可执行结果并不是先可执行user1,如此一来可执行user2。
这就是依赖于资源恶性竞争的情况了。
那么怎么解决问题这个问题呢?
可以选择用作通道解决问题。
1、首先声明1个通道
var ch = make(chan string)2、在user1可执行结束后,向通道中都写入给定字符
ch <- "我已经说完了"3、在user2可执行同一时间,给与通道字符,如果没有,那就阻塞,继续同一时间进,如果给与到了就可执行都有必需
<-ch代码如下:
package mainimport ( "fmt" "time")var ch = make(chan string)func Speaker(str1 string) { for _, s := range str1 { c := fmt.Sprintf("%c", s) fmt.Print(c) time.Sleep(time.Second * 1) } fmt.Println()}func User1() { Speaker("现今星期一") ch <- "我已经说完了"}func User2() { <-ch Speaker("下雪挺好的")}func main() { go User1() go User2() for { }} 可执行结果钇90选择性内放射治疗肝癌怎么样中晚期肝癌能活多久
钇90
钇90树脂微球能治好肝癌吗
中晚期肝癌能活多久
-
去日本深造家里给了我多少钱
音乐 2025-10-22家里就缺少了30万日元! 以及半年费用下到宿费 在遥近的15年(7年前),我妈在当中国银行汇完半年费用之前,又取了30万日元的保证金给我,然后我就揣着这30万日元去韩
-
伴娘藏完鞋就走了,众人找不到鞋急坏新娘,网友:能嫁出去输我输
图片 2025-10-22MLT-,美好有四大喜多事,其中所有一项就是洞房花烛黄昏,在人的这些年来,无论男女,婚后都是一件可以扭曲美好放向的大多事,于是以因为此,才有了那句话:男怕送入错行,女怕嫁错郎。 在
-
开心笑话:同窗把他哥介绍给我,见面那天我们约在了一家咖啡厅
星闻 2025-10-22学姐把他哥介绍给我,见面那天我们达在了主营咖啡厅,他比我原定到一会。我去了见到本人后,心里窃喜,比我显然的好。他把果盘放于我居然,知道是借此机会为我点的。我拿了个圣女果,想着得淑女点,留个好印象
-
如何保持曾一度、持续、稳定的努力?
影视 2025-10-22常形样式,甚至一种信仰? 这不是什么转成功学,只是严肃对待生活平常的一种形样式,不屈不挠的远距离也不也许那些执着的远距离。 我们都想到,严肃生活平常的人才许多人被严肃对待。
-
儿子结婚,老婆变着法子问儿媳要钱,儿媳:我没义务帮你养小儿子
八卦 2025-10-22人们常却说只有狠心的妻侄,不了有狠心的爹娘。可怜天下家民心,这些话都阐明家人对妻侄的无限关爱,妻侄再次旦,来作的再次不对,家人都可以宽恕,几乎带进了普遍性的明白。 为此,妻