当前位置: 首页 > article >正文

go多线程

1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束)

package main

import "time"

func main() {
	go func() {
		println("Hello, World!")
	}()
	time.Sleep(1 * time.Second)
}

2、wg.Add(数量)使用,这个会等待,直到全部完成

func main() {
    wg := sync.WaitGroup{}

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go calc(&wg, i)
    }

    wg.Wait()
    fmt.Println("all goroutine finish")
}
func calc(w *sync.WaitGroup, i int) {

    fmt.Println("calc:", i)
    time.Sleep(time.Second)
    w.Done()
}
传值localI := i,不能直接使用i,会重复,因为你在下次使用可能i已改变
var wg sync.WaitGroup
numGoroutines := 100
wg.Add(numGoroutines) //100个
for i := 0; i < numGoroutines; i++ {
	localI := i
	go func() {
		fmt.Println("Value:", localI)
		fmt.Println("大得")
		wg.Done() //减1,直到全部减完,结束
	}()
}
wg.Wait()
fmt.Println("执行完了")

在这里插入图片描述


http://www.kler.cn/a/308582.html

相关文章:

  • 国家网络安全法律法规
  • CTF攻防世界小白刷题自学笔记13
  • 2024年11月12日Github流行趋势
  • 速盾:高防 CDN 和 CDN 的缓存机制都一样吗?
  • Leecode热题100-35.搜索插入位置
  • 大厂的 404 页面都长啥样?看看你都见过吗~~~
  • python-在PyCharm中使用PyQt5
  • 【C++】多态详解
  • mysql学习教程,从入门到精通,SQL IN BETWEEN 运算符(13)
  • 基于STM32F407ZGT6——看门狗
  • new/delete和malloc/free到底有什么区别
  • docker镜像结构
  • 代码随想录:动态规划4-5
  • Java技术深度探索:高并发场景下的线程安全与性能优化
  • java面试题-Sql 语句的执行顺序
  • 【SOP】使用MMDeploy将MMAction2的模型转换为TensorRT
  • 二叉树的前中后序遍历(递归法)( 含leetcode上三道【前中后序】遍历题目)
  • java-lambda-常用方法总结汇总
  • 【乐企】旅客运输发票接口实现
  • 第159天:安全开发-Python-协议库爆破FTPSSHRedisSMTPMYSQL等
  • 持续集成与持续交付CI/CD
  • TDengine 首席架构师肖波演讲整理:探索新型电力系统的五大关键场景与挑战
  • CentOS7下安装Ruby3.2.4的实施路径
  • LeetCode_sql_day26(184,1549,1532,1831)
  • ubuntu系统服务器离线安装python包
  • 力扣(leetcode)每日一题 2848 与车相交的点