前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 并发执行

Go 并发执行

原创
作者头像
LiTongZERO
修改2021-02-07 10:23:28
5160
修改2021-02-07 10:23:28
举报
文章被收录于专栏:LitongZeroLitongZero

Go 并发执行

需要并发执行的场景有很多:爬虫、拉取数据、更新数据... Go作为天生高并发的语言,在使用并发时是比较方便的。

Demo案例

代码语言:txt
复制
package main

import (
	"fmt"
)

func main() {
	ConcurrentWork(5, func() {
		// ...业务逻辑
		fmt.Println("https://blog.csdn.net/LitongZero")
	})
}

/**
 * @Description: 开启多线程执行
 * @param total 启动线程数
 * @param work  需要执行的方法
 */
func ConcurrentWork(total int, work func()) {

	c := make(chan int) //设置多线程通道

	// 循环创建线程
	for i := 0; i <= total; i++ {
		go doMyWork(i, c, work)
	}

	// 等待所有线程结束
	for i := 0; i <= total; i++ {
		fmt.Printf("第 %d 项执行完毕\n", <-c)
	}
}

func doMyWork(i int, page chan int,work func()) {
	fmt.Printf("第 %d 项正在执行\n", i)
	work()
	// 返回执行完毕
	page <- i
}

也可以把work func()参数去除,直接在doMyWork方法中调用业务逻辑。

运行结果

代码语言:txt
复制
第 0 项正在执行
第 2 项正在执行
https://blog.csdn.net/LitongZero
第 0 项执行完毕
第 1 项正在执行
https://blog.csdn.net/LitongZero
第 1 项执行完毕
第 3 项正在执行
https://blog.csdn.net/LitongZero
https://blog.csdn.net/LitongZero
第 5 项正在执行
https://blog.csdn.net/LitongZero
第 2 项执行完毕
第 3 项执行完毕
第 5 项执行完毕
第 4 项正在执行
https://blog.csdn.net/LitongZero
第 4 项执行完毕

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go 并发执行
    • Demo案例
      • 也可以把work func()参数去除,直接在doMyWork方法中调用业务逻辑。
    • 运行结果
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档