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

Golang 并发之 Goroutine

Goroutine 是 Go 编程语言中的一个重要概念。它是 Go 语言实现并发的基础,可以简单地理解为 Go 语言中的轻量级线程

具体来说,Goroutine 有以下特点:

1.轻量级:

Goroutine 的创建和切换都非常快速,只需要几微秒。这与操作系统级别的线程相比要快得多。

2.并发性:

Goroutine 可以并发执行,意味着可以同时执行多个 Goroutine。Go 运行时会自动管理 Goroutine 的调度和执行。

3.独立性:

每个 Goroutine 都有自己的栈空间、程序计数器和其他必要的运行时数据结构。Goroutine 之间是相互独立的。

4.易用性:

创建 Goroutine 非常简单,只需要使用 go 关键字就可以了。

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	// 示例 1:并发性
	fmt.Println("示例 1: 并发性")
	var wg sync.WaitGroup
	wg.Add(2)

	// 启动两个 Goroutine 并发执行
	go func() {
		defer wg.Done()
		performTask("Goroutine 1")
	}()

	go func() {
		defer wg.Done()
		performTask("Goroutine 2")
	}()

	// 等待两个 Goroutine 执行完毕
	wg.Wait()
	fmt.Println("示例 1 完成")

	// 示例 2:独立性
	fmt.Println("\n示例 2: 独立性")
	var data int = 0
	go func() {
		data++
		fmt.Println("Goroutine 1 修改 data 为:", data)
	}()

	go func() {
		data--
		fmt.Println("Goroutine 2 修改 data 为:", data)
	}()

	// 给 Goroutine 一些时间执行
	time.Sleep(1 * time.Second)
	fmt.Println("main 函数中 data 的值:", data)

	// 示例 3:创建 Goroutine
	fmt.Println("\n示例 3: 创建 Goroutine")
	go func() {
		fmt.Println("这是一个新的 Goroutine")
	}()

	fmt.Println("这是 main 函数中的代码")
	time.Sleep(1 * time.Second)
}

// 模拟一个耗时的任务
func performTask(name string) {
	fmt.Printf("开始执行 %s 任务\n", name)
	time.Sleep(2 * time.Second)
	fmt.Printf("%s 任务执行完毕\n", name)
}


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

相关文章:

  • IDEA Maven构建时报错:无效的目标发行版17
  • Windows10环境下安装RabbitMq折腾记
  • 人工智能学习路线全链路解析
  • 基于单片机的无线智能窗帘控制器的设计
  • Linux:深入了解fd文件描述符
  • MySQL 视图 存储过程与存储函数
  • Django管理后台实现ECS服务管理:权限控制与重启功能
  • (vue)el-table-column type=“selection“表格选框怎么根据条件添加禁选
  • 【PyCharm】PyCharm CE免费版下载
  • ubuntu22.04 gcc,g++从10.5切换到低版本9.5
  • openwrt 常见编译问题及编译提速
  • 多台PC共用同一套鼠标键盘
  • STM32U575按键转换及设备驱动
  • 【2025 Rust学习 --- 12 实用工具特型02】
  • ubuntu安装ssh9.2
  • java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
  • 某地武警海警总队建筑物自动化监测
  • 20250110_ PyTorch中的张量操作
  • [ Android ] JetPack WorkManager Overview
  • Qt初识——下载与环境配置
  • QTcpSocket 中设置接收缓冲区大小
  • 嵌入式C语言:二维数组
  • ZDH-调度服务
  • 人工智能-数据分析及特征提取思路
  • 【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)
  • scrapy爬取图片