Go 语言中的并发编程(Let‘s Go 二十八)

本文介绍了Go语言中的并发编程基础,包括进程、线程、协程的概念。Go的goroutine是一种轻量级线程,具备低开销和内存共享特性。通过go关键字可以轻松创建goroutine实现并发执行,而在多核CPU环境下,Go程序能够实现并行。要获取并发执行的结果,可以借助通道(channel)。文章以一个简单的示例展示了如何创建和使用goroutine。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go从底层就支持并发编程,同时实现垃圾回收机制。

先了解并发相关的几个名词概念。

  • 进程:系统进行资源分配和调度的基本单位,使系统结构的基础,它是一个实体。

  • 线程:是程序中一个单一的顺序执行流程,是进程内相对独立的、可调度的执行单位。

  • 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。

  • 并发:多线程程序在单核心的 cpu 上运行。

  • 并行:多线程程序在多核心的 cpu 上运行。

    并发与并行并不相同,并发主要由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,Go程序可以设置使用核心数,以发挥多核计算机的能力。

goroutine 简介

goroutine 是一种非常轻量级的实现,可在单个进程里执行成千上万的并发任务,它是Go语言并发设计的核心。

说到底 goroutine 其实就是线程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,而且Go语言内部也实现了 goroutine 之间的内存共享。

使用 go 关键字就可以创建 goroutine,将 go 声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并发线程,这种线程在Go语言中则被称为 goroutine。

package main

import (
	"fmt"
)

func show() {
	fmt.Println("https://qiucode.cn")
}

func main() {

	//go 关键字放在方法调用前新建一个 goroutine
	go show()
	fmt.Println("秋码记录")
	go show()

}

在这里插入图片描述

因为 goroutine 在多核 cpu 环境下是并行的,如果代码块在多个 goroutine 中执行,那么我们就实现了代码的并行。

如果需要了解程序的执行情况,怎么拿到并行的结果呢?需要配合使用后续将会讲到的信道channel。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甄齐才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值