go语言修炼之六-并发

go语言修炼之六

并发

并发简单讲,就是同时进行多事务处理。比如做一个即时通讯工具的视频聊天功能,对聊天双方用户来讲,每个用户侧,程序需要同时处理音频和视频,并展示出来。
并发机制,到目前来讲有三种方式。
进程----线程----协程
每后一个机制,都进一步优化了系统开销,即:
多进程的并发,消耗系统资源最多。
多线程的并发,消耗系统资源次多。
多协程的并发,消耗系统资源最少。

说明

最后的协程方式,就是go语言特有的,也是go号称的特点之一。使用很简单。
用关键字 go 在当前主程中开启协程。

package main

import (
	"fmt"
)

func work1() {
	for i := 0; i < 5; i++ {
		fmt.Println("i am in work1")
	}
}

func work2() {
	for i := 0; i < 5; i++ {
		fmt.Println("i am in work2")
	}
}


func main() {

	//开启work1协程
	go work1()
	//开启work2协程
	go work2()

	for i := 0; i < 5; i++ {
		fmt.Println("i am in main")
	}


首先要理解func main(){…}这部分,整体就是一个主程,也可以认为是程序的协程之一。

这样相当于我们执行了三个事务条线:
1、main
2、work1
3、work2
这三个事务主要做的工作在这里就是各自输出一段信息。另外一种理解方式是,这个程序首先默认执行main函数,在main函数里遇到go关键字,就以协程(并行)方式调用了work1函数,下面又遇到了go关键字,一样以协程(并行)方式调用了work2函数,然后继续往下执行后续的语句,在这个时刻之后,我们系统上就是三个函数所代表事务在同时运行。

看看运行后的结果:
在这里插入图片描述
并未按我们设想那样,看到work1和work2在工作。原因是main后续部分执行太快。
go编译器启动work1,work2还需要分配资源,进行调度。在这之前main执行完毕,程序结束,连带work1,work2两个协程也关闭了。

那这里,简单的处理下,在main里面设个停留时间,等等work1和work2。

package main

import (
	"fmt"
	"time"
)

func work1() {
	for i := 0; i < 5; i++ {
		fmt.Println("i am in work1")
	}
}

func work2() {
	for i := 0; i < 5; i++ {
		fmt.Println("i am in work2")
	}
}
func main() {

	go work1()
	go work2()

	for i := 0; i < 5; i++ {
		fmt.Println("i am in main")
	}
	time.Sleep(time.Second * 5)

}

引入一个time包,time.Sleep(time.Second * 5)意思是休息等待5秒,输出如下:
在这里插入图片描述
这就是go最简单的并发应用。

尾声

水煮鱼配方
原料:草鱼、辣椒酱、姜片、葱段。
做法步骤:
第1步、鱼片片、切块。
第2步、水煮鱼料包中的腌鱼料撒如,加入鸡蛋清腌制。
第3步、腌制一会儿。
第4步、爆香姜片下入水煮鱼的豆瓣酱料。
第5步、加入水,下入鱼头煮制入味。
第6步、鱼头炖制10分钟左右加入先下鱼骨,再过五分钟下鱼片。
第7步、捞出鱼加入豆腐煮。
第8步、豆腐铺底,加入鱼肉盛盆加入大蒜沫、香葱段。
第9步、放入麻椒辣椒,浇热油即可。

你。。。。。。。。。。。想吃不?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值