Golang 并发

在 Golang(Go 语言)中,并发是核心特性之一,它使得编写能够同时执行多个任务的程序变得简单而高效。Go 提供了几种不同的机制来实现并发,但其中最核心的是 goroutine 和 channel。

Goroutine

Goroutine 是 Go 运行时(runtime)中的轻量级线程。与线程相比,goroutine 的调度由 Go 运行时管理,而不是由操作系统管理,这意味着 goroutine 的创建和销毁成本更低,且可以更高效地并发执行。你可以通过 go 关键字来启动一个新的 goroutine。

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world") // 在新的 goroutine 中执行
    say("hello")    // 在当前 goroutine 中执行
}

在这个例子中,say("world") 在一个新的 goroutine 中执行,而 say("hello")main goroutine 中执行。这会导致 “hello” 和 “world” 交替打印,因为它们几乎是并发执行的。

Channel

Channel 是 Go 语言中用于在 goroutine 之间进行通信的主要方式。你可以将 channel 看作是一个传递值的管道,一个 goroutine 可以通过这个管道发送值给另一个 goroutine。使用 channel,你可以同步并发执行的 goroutine,并且安全地交换数据。

package main

import (
    "fmt"
)

func count(c chan<- int) {
    for i := 0; i < 10; i++ {
        c <- i // 发送值到 channel
    }
    close(c) // 关闭 channel
}

func main() {
    msgs := make(chan int, 2) // 创建一个带缓冲的 channel
    go count(msgs)            // 启动 goroutine

    for msg := range msgs {   // 循环接收值直到 channel 被关闭
        fmt.Println(msg)
    }
}

在这个例子中,count 函数通过 msgs channel 发送整数值给 main 函数。main 函数通过一个 for-range 循环接收这些值,直到 channel 被关闭。

并发与并行

值得注意的是,并发(concurrency)和并行(parallelism)是不同的概念。并发是同时处理多个任务的能力,但这些任务并不一定是同时执行的(比如,它们可能在不同的时间点被操作系统的线程调度器切换执行)。而并行则是同时执行多个任务的能力,这通常要求有多个处理器核心。

在 Go 中,通过 goroutine 和 channel 实现的并发可以让你的程序更有效地利用多核处理器,因为 goroutine 可以在多个操作系统线程之间自动切换,而 channel 允许这些 goroutine 高效、安全地通信。

推荐主页
美股开户 投资美国 分析方法 CTA策略 期货基础知识 基金基础知识 股票术语 交易策略 金融指数 金融市场 交易所 股票基础 投资基础 多多招商团长 多多团长 多多买菜 请假条模板 猪粪烘干机 小型鸡粪烘干机 上海到吴忠物流专线 上海到中卫物流专线 上海到固原物流专线 上海到银川物流专线 上海到宁夏物流专线 知乎seo 拼多多团长 自学做网站 学做网站 华为 OpenAI 马斯克 三星 Go语言 Golang Golang语言 小红书带货笔记 小红书带货 wordpress教程 WordPress建站服务器 WordPress建站教程 WordPress建站服务 WordPress建站公司 小红书笔记带货 抖音客服 抖音视频 抖音软件 快手商家 快手极速版 快手网页版 抖音蓝v 抖音创作者服务中心 抖音创作者服务平台 抖音创作中心 抖音下载安装 58同城 抖音订单 抖音网页创作者中心 抖音网页版 番茄小说 抖音短视频 抖音创作者中心 抖音创作服务平台 抖音官网 抖音极速版 抖音直播 抖音下载 短视频IP孵化厂家 短视频IP孵化 快手电商 短视频IP 小红书推广 微信支付 宝塔软件 宝塔 wordpress模板 linux 云服务器 wordpress安装 阿里云建站 阿里云服务器 阿里云播放器 云虚拟主机 阿里云虚拟主机 虚拟主机 阿里云 bootstrap主题 bootstrap blog 浏览器 谷歌ads 腾讯云cdn cdn 腾讯云 ChatGPT 华为云 小红书规范 小红书规则 小红书新规 京东 小红书电商