协程的简单操作,你都知道哪些?Golang如何实现协程交替打印?

Posted 了 凡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协程的简单操作,你都知道哪些?Golang如何实现协程交替打印?相关的知识,希望对你有一定的参考价值。

博主介绍:

我是了 凡 微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~


前言

对于并发的概念,我们都清楚为了合理利用CPU的执行效率,我们选择当一个事务或多个事务执行时交替执行对于当下的计算机执行是很快的并且是对用户无感的,所以我们往往采用极少的资源执行更多事情。假设目前需要执行两个协程,一个协程来执行字母,一个协程执行数字,让两个协程进行交替打印如何实现?又或者如何使用大量的多个协程来交替的执行从一数到五万这样的大任务呢?

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: https://www.cbedai.net/lf


文章目录

公共变量

对于下方的WaitGroup方法可以参考我之前写过的一篇文章:https://blog.csdn.net/weixin_45765795/article/details/121185893

之后加入一个关键信号量(boolean)来控制同步问题,当然你也可以使用golang的管道来实现。

wg := sync.WaitGroup
wg.Add(2)
boolean := true
num, str := 1, 'A'
// 协程块
// ......
wg.Wait()

协程打印数字

go func() 
	defer wg.Done()
	for 
		if boolean 
			fmt.Print(num)
			num++
			fmt.Print(num)
			num++
			boolean = false
		
		if num > 28 
			break
		
	
()

协程打印字母

go func() 
	defer wg.Done()
	for 
		if !boolean 
			fmt.Print(string(str))
			str++
			fmt.Print(string(str))
			str++
			boolean = true
		
		if str > 'Z' 
			break
		
	
()

所有代码

package main

import (
	"fmt"
	"sync"
)

func main() 
	wg := sync.WaitGroup
	wg.Add(2)
	boolean := true
	num, str := 1, 'A'
	// 打印数字
	go func() 
		defer wg.Done()
		for 
			if boolean 
				fmt.Print(num)
				num++
				fmt.Print(num)
				num++
				boolean = false
			
			if num > 28 
				break
			
		
	()
	// 打印字符
	go func() 
		defer wg.Done()
		for 
			if !boolean 
				fmt.Print(string(str))
				str++
				fmt.Print(string(str))
				str++
				boolean = true
			
			if str > 'Z' 
				break
			
		
	()
	wg.Wait()



创作不易,点个赞吧!
如果需要后续再看点个收藏!
如果对我的文章有兴趣给个关注!
如果有问题,可以关注公众号【了凡银河系】点击联系我私聊。


以上是关于协程的简单操作,你都知道哪些?Golang如何实现协程交替打印?的主要内容,如果未能解决你的问题,请参考以下文章

Golang 线程和协程的区别

Golang协程

关于协程:nodejs和golang协程的不同

golang 单协程和多协程的性能测试

基于Golang协程实现流量统计系统

golang中四种方式实现子goroutine与主协程的同步