文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go中的并发模式:CSP与消息传递

2024-05-12 11:43

关注

在 go 中进行并发编程时,理解和使用适当的模式至关重要。csp 是一种基于顺序进程的并发模式,使用 goroutine 实现,适合简单的通信。消息传递是一种使用通道作为消息队列进行通信的模式,适用于复杂或多个 goroutine 交互的场景。实际应用中,可以使用 csp 来实现简单的消息服务,通过通道在不同的 goroutine 之间发送和接收消息。

Go 中的并发模式:CSP 与消息传递

在 Go 中进行并发编程时,理解和使用适当的模式至关重要。Communicating Sequential Processes (CSP) 和消息传递是 Go 中常见的两个并发模式,它们提供了有效协调并发操作的不同方式。

CSP

CSP是一种并发模式,基于交替执行发送和接收操作的顺序进程。Go 语言内置 Goroutine,使 CSP 模式成为一种简洁且强大的选择。

package main

import "fmt"

func main() {
    ch := make(chan int)
    go func() {
        ch <- 42
    }()
    fmt.Println(<-ch)
}

在这个示例中,一个 Goroutine 负责向通道 ch 发送一个整数,而主 Goroutine 从通道中接收该整数。

消息传递

消息传递是另一种用于在并发进程之间进行通信的模式。Go 中的通道本质上是消息队列,允许 Goroutine 安全且有效地交换数据。

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    ch := make(chan string)
    wg.Add(1)
    go func() {
        defer wg.Done()
        ch <- "Hello"
    }()
    wg.Wait()
    fmt.Println(<-ch)
}

在这个示例中,一个额外的 sync.WaitGroup 用于同步不同 Goroutine 的执行。Goroutine 将字符串消息发送到通道 ch,而主 Goroutine 从该通道接收消息。

何时使用每种模式

选择使用 CSP 还是消息传递取决于应用程序的需求:

实战

一个实际的例子是使用 CSP 来实现一个简单的消息服务:

package main

import (
    "fmt"
    "sync"
)

type Message struct {
    From, To, Content string
}

func main() {
    ch := make(chan Message)
    var wg sync.WaitGroup
    wg.Add(2)

    go func() {
        defer wg.Done()
        senderMessages(ch)
    }()

    go func() {
        defer wg.Done()
        receiveMessages(ch)
    }()

    wg.Wait()
}

func senderMessages(ch chan Message) {
    ch <- Message{From: "John", To: "Jane", Content: "Hello"}
    ch <- Message{From: "Jane", To: "John", Content: "Hi"}
}

func receiveMessages(ch chan Message) {
    for msg := range ch {
        fmt.Println(msg)
    }
}

此示例演示了如何使用 CSP 模式在不同 Goroutine 之间发送和接收消息。

以上就是Go中的并发模式:CSP与消息传递的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯