协程的简单操作,你都知道哪些?golang如何实现协程交替打印?(代码片段)

@了凡 @了凡     2022-11-28     693

关键词:

博主介绍:

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


前言

对于并发的概念,我们都清楚为了合理利用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()



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


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

nodejs和golang都是支持协程的,从表现上来看,nodejs对于协程的支持在于async/await,golang对协程的支持在于goroutine。关于协程的话题,简单来说,可以看作是非抢占式的轻量级线程。  协程本身一句话概括,上面提到了 &... 查看详情

golang线程和协程的区别

...没有这个动作,所以线程切换比进程切换代价要小得多。协程:想要简单,又要性能高,协程就可以达到我们的目的,它是用户视角的一种抽象,操作系统并没有这个概念,主要思想是在用户态实现调度算法,用少量线程完成大... 查看详情

golang中四种方式实现子goroutine与主协程的同步(代码片段)

如何实现子goroutine与主线程的同步第一种方式:time.sleep(),这种方式很太死板,就不演示了。第二种方式:使用channel机制,每个goroutine传一个channel进去然后往里写数据,在再主线程中读取这些channel,直到全部读到数据了子gorout... 查看详情

golang教程:goroutine协程(代码片段)

...并行的区别。在这篇教程中我们将讨论在Go中如何通过Go协程实现并发。什么是协程Go协程(Goroutine)是与其他函数或方法同时运行的函数或方法。可以认为Go协程是轻量级的线程。与创建线程相比,创建Go协程的成本很小。因此... 查看详情

golang单协程和多协程的性能测试(代码片段)

测试数据:单协程操作1亿数据,以及多协程(10条协程)操作1亿数据(每条协程操作1kw数据)废话少说,贴代码:单协程测试运算:packagemainimport( "fmt" "time")functestNum(numint) fori:=1;i<=10000000;i++ num=num+i num=num-i num=num*i num=num/i fu... 查看详情

golang退出协程的几个错误方法(代码片段)

...可禁止任何形式的转载,原文链接文章目录对象方法协程的错误退出协程中的协程的错误退出多个协程的错误退出一个通道控制多个协程的正确退出方法正确退出协程方法容易搜到,记录三个坑。对象方法协程的错误退... 查看详情

通俗易懂的go协程的引入及gmp模型简介(代码片段)

本文根据Golang深入理解GPM模型加之自己的理解整理而来Go协程的引入及GMP模型一、协程的由来1.单进程操作系统2.多线程/多进程操作系统3.引入协程二、golang对协程的处理1.对co-routine对处理2.对调度器的优化(早期)三、goroutine调度... 查看详情

golang之context详解

...这个例子:上述例子中定义了一个buffer为0的channeldone,子协程运行着定时任务。如果主协程需要在某个时刻发送消息通知子协程中断任务退出,那么就可以让子协程监听这个donechannel,一旦主协程关闭donechannel,那么子协程就可以... 查看详情

go语言协程(代码片段)

概述Go语言中,协程可以简单理解为轻量级的线程。协程开销比线程低,M个协程运行在N个线程上,也就是通常所说的M:N模型。协程完全由Golang运行时管理,而不是由操作系统管理。线程是抢占式的多任务,而... 查看详情

ucontext-人人都可以实现的简单协程库

1.协程介绍协程是一种轻量级的、用户态的执行单元。协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,再切回来的时候,恢复先前保存的寄存器上下文和栈。不管是进... 查看详情

golang协程与通道---中(代码片段)

GoLang协程与通道---中协程的同步:关闭通道-测试阻塞的通道使用select切换协程通道、超时和计时器(Ticker)习惯用法:简单超时模式协程和恢复(recover)协程的同步:关闭通道-测试阻塞的通道通道可... 查看详情

unity如何停止不用字符串方式开启协程的方法

通常我们知道开启协程用StartCoroutine("Method");停止协程用StopCoroutine("Method");如果我们想要终止所有的协程,可以通过StopAllCoroutines();方法来实现。注意:这只会终止在调用该方法的对象中(应该是指调用这个方法的类)开始的协程... 查看详情

golang退出协程的几个错误方法(代码片段)

...可禁止任何形式的转载,原文链接文章目录对象方法协程的错误退出协程中的协程的错误退出多个协程的错误退出一个通道控制多个协程的正确退出方法正确退出协程方法容易搜到,记录三个坑。对象方法协程的错误退... 查看详情

golang退出协程的几个错误方法(代码片段)

...可禁止任何形式的转载,原文链接文章目录对象方法协程的错误退出协程中的协程的错误退出多个协程的错误退出一个通道控制多个协程的正确退出方法正确退出协程方法容易搜到,记录三个坑。对象方法协程的错误退... 查看详情

golang之goroutine

...毕后再执行fun2函数这是毋庸置疑的但是当我们通过创建协程来实现这两个函数时此时终端输出并不是输出1-10的顺序序列而是这两个协程在同一个时间片内共同运行简称并行!这里我用了time包中的Sleep因为我这里的输出数太少所... 查看详情

这个对协程的分析不错

协程诞生解决的是低速IO和高速的CPU的协调问题,解决这类问题主要有三个有效途径:异步非阻塞网络编程(libevent、libev、redis、Nginx、memcached这类)协程(golang、gevent)“轻量级线程”,相当于是在语言层面做抽象(Erlang)对... 查看详情

白话golang协程池(代码片段)

...发2.并发的好处3.Go如何并发4.G-P-M调度模型5.Go程的代价6.协程池的作用7.简易协程池的设计&实现8.开源协程池的使用9.小结参考文献1.何为并发并发指在一段时间内有多个任务(程序,线程,协程等)被同时执行... 查看详情

如何在主函数中恢复协程的执行?

】如何在主函数中恢复协程的执行?【英文标题】:Howexecutionofacoroutineresumeinmainfunction?【发布时间】:2021-11-1017:48:32【问题描述】:如果我们在主函数中使用协程,那么协程的执行如何在延迟后恢复。就像在这张图片中,协程在... 查看详情