首页 > 其他分享 >golang-groutine有序调度

golang-groutine有序调度

时间:2023-07-30 22:35:10浏览次数:47  
标签:int make chan 调度 golang func var groutine printSelf

本质上还是通过channel的队列性质(FIFO)来实现的,以这个思路为主。

 1 func test1() {        
 2     var wg sync.WaitGroup
 3 
 4     var ch1 = make(chan int, 1)
 5     var ch2 = make(chan int, 1)
 6     var ch3 = make(chan int, 1)
 7     var printSelf func(pCont int, inChan chan int, outChan chan int)
 8     printSelf = func(pCont int, inChan chan int, outChan chan int) {
 9         defer wg.Done()
10 
11         select {
12         case _ = <- inChan:
13             fmt.Println("printVal: ", pCont)
14         }
15         outChan <- 0 //可以写入了
16     }
17 
18     maxRun := 100
19     maxGo := 3
20     incr := 0
21 
22     ch1 <- 0
23     for i := 0; i < ((maxRun/maxGo) + 1); i++ {
24         wg.Add(3)
25         go printSelf(incr, ch1, ch2)
26         incr++
27         go printSelf(incr, ch2, ch3)
28         incr++
29         go printSelf(incr, ch3, ch1)
30         incr++
31         wg.Wait()
32     }        
33 }

 

标签:int,make,chan,调度,golang,func,var,groutine,printSelf
From: https://www.cnblogs.com/supermarx/p/17592210.html

相关文章

  • Golang漏洞管理
    原文在这里概述Go帮助开发人员检测、评估和解决可能被攻击者利用的错误或弱点。在幕后,Go团队运行一个管道来整理关于漏洞的报告,这些报告存储在Go漏洞数据库中。各种库和工具可以读取和分析这些报告,以了解特定用户项目可能受到的影响。这个功能集成到pkg.go.dev和一个新的命令行......
  • 力扣-任务调度器
    1.问题描述给定一个用字符数组表示的CPU需要执行的任务列表。其中包含使用大写的A-Z字母表示的26种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在1个单位时间内执行完。CPU在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的......
  • dolphinscheduler 调度spark on k8s
    dolphinscheduler对于k8s的支持可以使用spark任务模式选择k8s配置,当然也可以直接通过k8s集成通过容器镜像模式运行,两种方式各有利弊,但是完全基于k8s模式会比较方便些集成玩法说明spark任务模式此模式我们需要配置SPARK_HOME给每个dolphinschedulerworker节点,同时对于......
  • Quartz实战:基于Quartz实现定时任务的动态调度,实现定时任务的增删改查
    文章目录一、Quartz基础二、使用Quartz实现定时任务的动态调度1、使用Quartz-jobStore持久化2、前端页面实现效果图3、自定义job表4、增删改查Controller5、Quartz工具类6、测试任务类7、springboot启动初始化定时任务8、自定义JobFactory,使Task注册为Bean9、省略的内容10、总结......
  • GoRedisLock:Golang保障数据一致性的分布式锁解决方案
    在现代分布式系统中,多个节点之间共享资源是常见的需求。然而,并发访问共享资源可能导致数据不一致性和竞争条件。为了解决这些问题,我们需要引入分布式锁。GoRedisLock是一个出色的分布式锁库,它结合了Go语言和Redis的优势,提供了稳定高效的分布式并发控制解决方案。**项目地址:**htt......
  • Quartz任务调度快速入门
    了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述:●Job:是一个接口,只有一个方法voidexecute(JobExecutionContextcontext),开发者实现该接口定义运行任务,JobExe......
  • golang打印指针切片/数组的值
     FmtSlice2String方法可以将指针切片的值打印处理packagemainimport( "fmt" "reflect")typeStudentstruct{ Namestring`json:"name"cn:"名字"` Ageuint64`json:"age"cn:"年龄"`}funcmain(){ s:=mak......
  • Golang gRPC学习(05): retry重试
    什么是重试如果服务出现了错误,主要是网络,服务器出现了短暂异常的时候,该怎么办?我们都会人工或者自动的重新连接服务试试,看服务是否恢复可用了。这种重新进行连接服务的一种方式就是重试。如果是在微服务里,应该属于微服务治理的范畴。重试是处理网络服务出现暂时不可用的一种方......
  • golang技术降本增效的手段
    最近一年各大中小厂都在搞"优化",说到优化,目的还是"降本增效",降低成本,增加效益(效率)。技术层面,也有一些降本增效的常规操作。比如池化、io缓冲区技术golangC#eg.池化技术snnc.PoolObjectPool前端切图仔,归入前端资源池,随用随取字节数组缓冲区bytes.BufferLis......
  • Golang安装
    目录Go安装下载安装GoGo安装下载安装Go地址:https://studygolang.com/dl1、根据系统来选择下载包。2、我是Window,所以直接下载windows的安装包来安装。3、在控制台窗口输入“goversion”可查看Go版本,检测是否安装成功。4、配置环境变量。Go需要一个安装目录,还需......