我的第一个Golang程序

本文深入探讨了Golang中的协程(goroutine)及如何使用sync.WaitGroup进行任务同步。通过实例展示了如何创建和管理多个并发任务,确保所有任务完成后再继续执行主线程。
本程序参考:GO语言实战 GO IN ACTION
package main

import (
   "fmt"
   "runtime"
   "sync"
)

func   main(){
   //分配一个逻辑处理器给调度器使用
   runtime.GOMAXPROCS(1)

   //wg来等待程序完成
   //计数加2,表示要等待两个goroutine
   var wg sync.WaitGroup
   wg.Add(2)



   fmt.Println("Start Goroutines")

   //声明一个匿名函数,并创建一个goroutine
   go func() {

      //在函数退出时调用DOne来通知main函数工作已经完成
      defer wg.Done()

      //显示字母表三次
      for count:=0;count<3;count++{
         for char :='a';char <'a'+26;char ++{
            fmt.Printf("%c",char)
         }
      }
   }()

   //声明一个匿名函数,并创建一个goroutine
   go func() {

      //在函数退出时调用DOne来通知main函数工作已经完成
      defer wg.Done()

      //显示字母表三次
      for count:=0;count<3;count++{
         for char :='A';char <'A'+26;char ++{
            fmt.Printf("%c",char)
         }
      }
   }()

   //等待goroutine结束
   fmt.Println("waiting to finish")
   wg.Wait()

   fmt.Println("\nTerminating Program")

}


/*
runtime.GOMAXPROCS 去设置CPU,Golang 默认使用所有的cpu核
*/

运行结果:

修改:

runtime.GOMAXPROCS(2)  备注:电脑为双核处理器

 

 

/* golang中的同步是通过sync.WaitGroup来实现的.WaitGroup的功能:它实现了一个类似队列的结构,可以一直向队列中添加任务, 当任务完成后便从队列中删除,如果队列中的任务没有完全完成,可以通过Wait()函数来出发阻塞,防止程序继续进行, 直到所有的队列任务都完成为止.WaitGroup总共有三个方法: Add(delta int), Done(), Wait()。Add:添加或者减少等待goroutine的数量 Done:相当于Add(-1) Wait:执行阻塞,直到所有的WaitGroup数量变成0 */

当程序删除 

wg.Wait()后,运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值