加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang中协程同步sync.waitGroup

发布时间:2020-12-16 18:25:16 所属栏目:大数据 来源:网络整理
导读://使用golang中sync.WaitGroup来实现协程同步package mainimport ("fmt""net/http""io/ioutil""time""os""sync")var waitGroup = new(sync.WaitGroup)func download(i int ){url := fmt.Sprintf("http://pic2016.ytqmx.com:82/2016/0919/41/%d.jpg",i)fmt.Pr
//使用golang中sync.WaitGroup来实现协程同步

package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
	"time"
	"os"
	"sync"
)

var waitGroup = new(sync.WaitGroup)
func download(i int ){
		url := fmt.Sprintf("http://pic2016.ytqmx.com:82/2016/0919/41/%d.jpg",i)
		fmt.Printf("开始下载:%sn",url)
		res,err := http.Get(url)
		if err != nil || res.StatusCode != 200{
			fmt.Printf("下载失败:%s",res.Request.URL)
		}
		fmt.Printf("开始读取文件内容,url=%sn",url)
		data,err2 := ioutil.ReadAll(res.Body)
		if err2 != nil {
			fmt.Printf("读取数据失败")
		}

		ioutil.WriteFile(fmt.Sprintf("pic2016/1_%d.jpg",i),data,0644)
		//计数器-1
		waitGroup.Done()
}

func main()  {
	//创建多个协程,同时下载多个图片
	os.MkdirAll("pic2016",0666)
	now := time.Now()

	for i :=1; i<24; i++ {
		//计数器+1
		waitGroup.Add(1)
		go download(i)
	}

	//等待所有协程操作完成
	waitGroup.Wait()
	fmt.Printf("下载总时间:%vn",time.Now().Sub(now))
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读